bash 셸 학습 기록 (1)
Liux 커 널 에 서 는 어떤 버 전의 Liux 발행 판 이 든 다음 셸 지원 이 있 습 니 다.BASH, CSH, TCSH, ZSH, SCSH. 이 셸 들 은 모두 최초의 셸 에서 발 전 된 것 이다.너 는 아래 의 구조 도 를 참고 하여 이해 할 수 있다.
USER Request
Shell
Linux kernal
Computer hardware
Application
위의 관계 도 를 통 해 알 수 있 듯 이 셸 은 사용자 의 수요 와 Liux 커 널 간 의 전환 미디어 입 니 다. 사용 자 는 Liux 시스템 이 사용자 의 수 요 를 처리 하기 위해 특정한 임 무 를 완성 할 수 있 습 니 다. 사용 자 는 셸 을 작성 할 수 있 습 니 다. 셸 프로그램 을 실행 하면 Liux 커 널 과 컴퓨터 의 바 텀 하드웨어 간 에 양 방향 상호작용 이 존재 합 니 다.하드웨어 를 제어 하 는 기능 을 실현 한다.셸 언어 는 명령 행 언어의 상호작용 이다.
2, CLI (commond line interface), 명령 행 상호작용
셸 언어 는 Liux 커 널 과 의 상호작용 을 제공 합 니 다. 그러면 우 리 는 명령 행 을 통 해 명령 을 입력 하면 Liux 와 의 상호작용 을 실현 할 수 있 습 니 다.
2.1 현재 셸 형식 을 어떻게 찾 습 니까?
$ cat /etc/shells
>>
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/bin/rbash
/bin/dash
/usr/bin/tmux
저 는 ubuntu 시스템 을 사용 하고 tmux 도 구 를 설 치 했 기 때문에 / usr / bin / tmux 가 있 습 니 다.너 는 없 을 수도 있다. 여 기 는 모든 사람의 상황 이 다 를 수도 있다.당시 에 배 운 것 은 bash 였 는데, bash 를 지지 하면 된다.
2.2 기본 명령 행 단축 키
단축 키
속뜻
CTRL-L
명령 창 지우 기
CTRL-W
현재 명령 줄 의 커서 가 있 는 위 치 를 삭제 하 는 단어
CTRL-U
현재 명령 줄 의 모든 내용 삭제
CTRL-R
이전에 사 용 했 던 명령 을 검색 합 니 다.
CTRL-C
현재 실행 중인 명령 취소
예 를 들 어 명령 행 에 date 명령 을 입력 할 수 있 습 니 다.
$ date
>>
2018 11 26 09:16:14 CST
단축 키 CTRL + L 을 입력 하면 명령 창 이 비 워 집 니 다!너 는 위의 표 의 명령 의 미 를 끊임없이 이해 하려 고 시도 할 수 있다.
2.3, Liux 에서 명령 의 도움 을 받 습 니 다.
만약 당신 이 python 을 사용 한 적 이 있다 면, matlab 는 help 가 무엇 인지 잘 이해 할 것 입 니 다.* * 특정한 함수 나 키워드 * * 의 의 미 를 모 르 거나 어떻게 사용 하 는 지 모 를 때 help 등 명령 을 사용 할 수 있 습 니 다. Liux 에서 명령 행 에서 다음 과 같은 세 가지 방식 으로 특정한 명령 의 의미 와 사용 방식 을 볼 수 있 습 니 다.
man date
info date
date --help
3. 셸 프로 그래 밍 의 대체 적 인 절차 요약
3.1 type 명령
type 명령 은 내장 (build - in) 에 속 하 는 명령 인지, 외부 에 있 는 바 이 너 리 실행 가능 한 파일 인지 찾 는 데 사 용 됩 니 다. 예 를 들 어,
$ type -a ls
>>
ls is aliased to `ls --color=auto'
ls is /bin/ls
$ type -a date
>>
date is hashed (/bin/date)
$ type -a history
>>
history is a shell builtin
$ type -a echo
>>
echo is a shell builtin
echo is /bin/echo
등등 명령 은 type 명령 으로 종 류 를 볼 수 있 습 니 다.여기, 이곳
# -a,a all
$ type -a
3.2 시작 "Hello, world!"
나 는 vim 편집 기 를 사용 하 는 것 에 비교적 익숙 하기 때문에, 나 는 항상 vim 를 사용 하여 파일 을 만 들 거나 열 것 이다. 물론, 너 는 gedit 등 다른 컴 파 일 러 를 사용 하여 같은 조작 을 할 수 있다.만약 당신 이 vim 을 공부 하고 싶다 면 이 두 문장 을 참고 할 수 있 습 니 다.
3.3 bash 파일 을 실행 가능 한 파일 로 설정 하고 bash 프로그램 을 실행 합 니 다.
$ chmod +x " "/" "
#for instance
$ chmod +x ~/Public/bash_lerning/begin00.sh
그리고 명령 창 을 열 고 프로그램 을 실행 합 니 다. 다음 세 가지 방법 이 있 습 니 다.
$ . " "/" "
$ ./" "/" "
$ bash /" "/" "
예컨대
$ . ~/Public/base_learning/begin00.sh
>>
Hello, world!
실행 가능 한 파일 을 설정 하지 않 고 3.3 작업 을 수행 하지 않 으 면 bash 파일 을 직접 실행 하면 알림: bash: "파일": Permission denied!
3.4 debug bash script
bash 스 크 립 트 를 debug 하 는 5 가지 방법 이 있 습 니 다.
$ bash -x bash-name #
$ bash -xv bash-name #
세 번 째 방식 은 bash 파일 에 설정 합 니 다.
#! /bin/bash -x
네 번 째 방식 은 bash 파일 에 설정 합 니 다.
#! /bin/bash
## Turn on debug mode##
set -x
...
...
...
##Turn off debug mode##
set +x
제 5 종
#!/bin/bash -x
set -n # bash ,
set -o noexec
다섯 번 째 방식 은 일반적으로 bash 파일 에 문법 오류 가 있 는 지 확인 하 는 데 사 용 됩 니 다.
4, 셸 의 변수
4.1 시스템 변수
다음 세 가지 명령 을 통 해 시스템 변 수 를 볼 수 있 습 니 다.
$ set
$ env
$ printenv
4.2 bash 셸 의 변수
4.2.1 bash 셸 의 변수 문법 은:
varName = someValue 주의 등호 양쪽 에 빈 칸 을 넣 으 면 안 됩 니 다. 이것 은 python, matlab 등 언어의 문법 규칙 과 매우 다 릅 니 다. 밤 을 들 어 보 세 요.
#! /bin/bash
var1="hello, world"
var2 = 123
echo "var1= ${var1}"
echo "var2= ${var2}"
명령 행 에서 다음 작업 을 수행 합 니 다.
chmod +x begin00.sh
./begin00.sh
>>
./begin00.sh: line 3: var2: command not found
var1= hello, world!
var1=
bash 컴 파일 러 가 설명 할 때 등호 왼쪽 에 빈 칸 이 있 는 var 2 는 cmd 명령 이 라 고 생각 하기 때문에 잘못 보 고 했 지만 var 1 은 완전히 정확 하 다.이것 이 바로 bash 변수의 사용 방법 이다.
${varName}----
$varName ------ , 。
4.2.2 변수의 값 을 어떻게 표시 합 니까?
두 가지 방법 중 하 나 는 echo 이 고 하 나 는 C + + 언어의 스타일 의 printf 입 니 다.문법
echo "${varName}"
print "${varName}" #printf C++
위의 예 설명 을 계속 하 세 요.
#! /bin/bash
var1="hello, world!"
var2=123
echo "var1= ${var1}"
printf "var2= %d
" ${var2}
실행 프로그램:
$ ./begin00.sh
>>
var1= hello, world!
var2= 123
4.2.3 bash 셸 에서 변수의 기본 값
문법
echo ${varName=somevalue1 somevalue1} # 1
혹은
echo ${varName:=somevalue1 somevalue1} # 2
혹은
echo ${varName-somevalue1 somevalue1} # 3
이 세 가 지 는 모두 기본 값 을 부여 할 수 있 지만 그 당시 1, 2 두 가 지 는 세 번 째 와 구별 되 었 고 밤 을 들 었 다.
echo ${var3:=34 56}
echo ${var4-23 45 78}
echo ${var5=-23 -45}
echo ${var3}
echo ${var4}
echo ${var5}
실행 결 과 는 다음 과 같다.
./begin00.sh
34 56
23 45 78
-23 -45
34 56
-23 -45
대응 코드 를 통 해 알 수 있 듯 이 세 번 째 방식 으로 변 수 를 주 는 기본 값 은 한 번 사용 한 후에 바로 방출 되 고 unset 명령 을 실행 한 것 과 같 으 며 1, 2 두 번 째 방법 은 변수 에 계속 저 장 됩 니 다.
4.3 자체 코드 분석
다음은 일부 코드 와 운행 결 과 를 붙 여 학습 분석 을 제공 하고 비교적 간단 한 입문 을 제공 합 니 다.
#! /bin/bash
#================================================================
# Copyright (C) 2018 * Ltd. All rights reserved.
#
# File name : begin01.sh
# Author : simileciWH
# Email : [email protected]
# Created date: 2018-11-14 10:44:55
# Description : code is far away from bugs with the god animal protecting
#
#================================================================
echo hello world
echo "hello world"
echo "Current data: $(date) @ $(hostname)"
echo "Network configuration"
/sbin/ifconfig
pwd
/bin/pwd
echo "Hello, ${LOGNAME}"
echo "Today is $(date)"
echo "Users currently on the machine, and their processes:"
w #use man w to help yourself
실행 결과:
hello world
hello world
Current data: 2018 11 26 11:27:52 CST @ pcMaster
Network configuration
enp7s0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 28:d2:44:35:bc:85 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 19
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 2786 bytes 424414 (424.4 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2786 bytes 424414 (424.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlp8s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.31.129 netmask 255.255.255.0 broadcast 192.168.31.255
inet6 fe80::c363:6e0f:c564:4f4f prefixlen 64 scopeid 0x20<link>
ether a4:db:30:bf:8d:c1 txqueuelen 1000 (Ethernet)
RX packets 295059 bytes 332704942 (332.7 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 132331 bytes 16925943 (16.9 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
/home/simileciwh/Public/bash_begin
/home/simileciwh/Public/bash_begin
Hello, simileciwh
Today is 2018 11 26 11:27:52 CST
Users currently on the machine, and their processes:
11:27:52 up 3:18, 1 user, load average: 0.87, 0.69, 0.63
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
simileci :0 :0 08:10 ?xdm? 5:11 0.00s /usr/lib/gdm3/g
5, 인용 인용
bash script 에는 3 개의 quote (참조) 기호 가 있 습 니 다.
quote type
명칭.
속뜻
"
작은 따옴표
작은 따옴표 의 모든 내용 을 보호 합 니 다.변수 와 명령 줄 은 바 꿀 수 있 습 니 다.
’
작은 따옴표
작은 따옴표 의 모든 내용 을 보호 하 며, 어떠한 교환 도 해 서 는 안 된다.
\
백 슬 래 쉬
특수 문자 의 기능 이나 의 미 를 취소 합 니 다.
밤 을 들 어 라: 시스템 변수 인 HOSTNAME 를 사용 하 라. 예 를 들 어 HOSTNAME 의 값 은 컴퓨터 의 이름 이 고 사람마다 다르다.
#! /bin/bash
echo "${HOSTNAME}" #
echo '${HOSTNAME}' #
echo "\${HOSTNAME}" # $ !
실행 결과:
pcMaster
${HOSTNAME}
${HOSTNAME}
6, 키보드 에서 사용자 의 입력 획득
6.1 read -p
read 명령: "문법":
read -p "prompt" variable1 variable2 variableN
매개 변수 "- p" 는 사용자 에 게 알림 정 보 를 표시 합 니 다. 변수 variable 1, variable 2,..................................................................밤 을 들다
#! /bin/bash
read -p " :" name
echo "Hi, ${name}. I have remember you!"
실행 가능 한 파일 로 파일 을 설정 하 는 것 을 잊 지 마 세 요!실행 결과:
:simileciwh
Hi, simileciwh. I have remember you!
6.2 read -t
때때로 사용자 와 입력 하 는 시간 을 제한 하거나 사용자 의 입력 을 기다 리 는 상태 가 아니 므 로 timeout input 체 제 를 설정 하여 입력 을 기다 리 는 창 이 일정 시간 후에 자동 으로 닫 히 도록 해 야 합 니 다."문법":
read -t Num -p "prompt" var1 var2 varN
인자 - t 는 timeout 이라는 뜻 으로 Num 시간 단 위 는 초 (s) 입 니 다. 즉, Num 초 후에 자동 으로 끝나 사용자 의 입력 을 기다 리 지 않 습 니 다.
6.3 read -s
사용자 암 호 를 가 져 올 때 사용자 가 입력 한 암 호 를 표시 하지 않 기 를 원 하지 않 기 때문에 인자 - s 를 사용 하여 사용자 의 입력 을 숨 기 고 표시 하지 않 을 수 있 습 니 다."문법":
read -s -p "prompt" variable
6.4 read - r 일괄 처리 여러 변수의 할당
밤 을 들다
nameservers="12 23 546"
echo "$nameservers"
read -r v1 v2 v3 <<< "$nameservers"
echo "v1=$v1, v2=$v2, v3=$v3"
실행 결과:
12 23 546
v1=12, v2=23, v3=546
7, 산수 연산
연산 자
묘사 하 다.
예시
+
덧셈
echo $((2+3))
-
감법
echo $((5-2))
*
곱셈
echo $((2*3))
/
나눗셈
echo $((4/2))
%
나머지 를 취하 다
echo $((5%2))
++
더 하 다
x=2; echo $((x++)),x=2; echo $((++x))
--
자감 하 다
x=3; echo $((x–)),x=3; echo $((–x))
**
제곱
echo $((10**2))
이것들 은 C 언어의 규칙 과 충돌 하지 않 는 다.
8,declare
declear 명령 을 사용 하여 변수의 값 과 속성 을 설정 합 니 다."문법":
declare [ ] variable
매개 변 수 는 다음 과 같이 선택 할 수 있 습 니 다.
매개 변수
속뜻
-i
변수 유형
-r
변수 형식 - readonly - 읽 기 전용
-x
export 형식 설정
-g
함수 에 사용 할 전역 변 수 를 만 듭 니 다.그렇지 않 으 면 무시 합 니 다.
-p
변수의 속성 과 값 보이 기
다른 속성 도 있 습 니 다. help 명령 을 통 해 볼 수 있 습 니 다.
9, 상수 변수 만 들 기
두 가지 방법 이 있 습 니 다. 하 나 는 readonly 명령 을 사용 하 는 것 이 고, 다른 하 나 는 declare - r 명령 을 사용 하 는 것 입 니 다.상수 변수의 값 이 초기 화 되 었 을 때 unset 를 사용 하 더 라 도 수정 할 수 없습니다.밤 을 들다
readonly var1=23
declare -r var2=32
var1=34
var2=45
echo "var1= ${var1}"
echo "var2= ${var2}"
unset var1
var1=34
echo "var1= ${var1}"
실행 결과:
./123.sh: line 3: var1: readonly variable
./123.sh: line 4: var2: readonly variable
var1= 23
var2= 32
./123.sh: line 7: unset: var1: cannot unset: readonly variable
./123.sh: line 8: var1: readonly variable
var1= 23
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
성공할 때까지 명령 실행최근에 유용한 간단한 BASH 패턴: Run command every time it fails until it doesn't fail. 예시 작은 배치로 수십만 개의 레코드를 내보내야 하는 장기 실행 작업이 있었습니...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.