쉘 스크립트
첫 번째 쉘 스크립트: helloworld
스크립트는 #!/bin/bash로 시작합니다(파서 지정).
다음으로 helloworld를 출력하는 셸 스크립트를 만듭니다.
-
hello.sh를 터치합니다.
-
쓰기 명령
#!/빈/배시
에코 "안녕하세요"
-
저장 후 실행, 그림은 절대경로와 상대경로 실행으로 구분되며, sh bash는 소프트링크인 bash를 가리키고 최종적으로 bash를 호출하는 것을 제외하고는 동일한 기능을 가지며 루트 디렉토리에서 직접 실행은 권한 부여 스크립트가 필요함 권한
첫 번째 실행 방법은 본질적으로 bash 파서가 스크립트 실행을 도와주므로 스크립트 자체에는 실행 권한이 필요하지 않습니다. 두 번째 실행 방법은 본질적으로 스크립트 자체를 실행해야 하므로 실행 권한이 필요합니다.
두 번째 셸 스크립트: 다중 명령 처리
쉘 디렉토리에 demo.txt를 생성하고 demo.txt 파일에 "I like drink Coke"를 추가합니다.
#!/bin/bash
touch demo.txt
echo "I like drinking Coke" >> demo.txt
쉘의 변수
시스템 및 맞춤 변수
일반적으로 사용되는 시스템 변수: HOME, HOME,H OME , PWD,SHELL, SHELL,S H E LL , USER 등은 파일에 작업을 쓰기에 편리합니다.
1. 기본 문법
(1) 변수 정의: 변수 = 값
(2) 변수 실행 취소: 변수 설정 해제
(3) 정적 변수 선언: 읽기 전용 변수, 참고: 설정 해제할 수 없음
2. 변수 정의 규칙
(1) 변수 이름은 영문, 숫자, 밑줄을 포함할 수 있으나, 숫자로 시작할 수 없으며, 환경변수 이름은 대문자로 하는 것을 권장합니다.
(2) 등호 양쪽에 공백을 둘 수 없다.
(3) bash에서 변수의 기본 유형은 문자열 유형으로 수치 연산을 직접 수행할 수 없습니다.
(4) 변수 값에 공백이 있는 경우 큰따옴표나 작은따옴표로 묶어야 합니다.
(5) 변수는 다른 셸 프로그램에서 사용할 수 있는 전역 환경 변수로 승격될 수 있습니다. 내보내기 변수 이름
sxh@learn-basis:shell$ A=4 //定义变量A
sxh@learn-basis:shell$ echo $A
4
sxh@learn-basis:shell$ A=9 //给变量A重新赋值
sxh@learn-basis:shell$ echo $A
9
sxh@learn-basis:shell$ unset A //撤销变量A
sxh@learn-basis:shell$ echo $A
sxh@learn-basis:shell$ readonly B=2 //声明静态的变量B=2,不能unset
sxh@learn-basis:shell$ echo $B
2
sxh@learn-basis:shell$ unset B
bash: unset: B:无法取消设定: 只读 variable
sxh@learn-basis:shell$ C=1+2 //在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
sxh@learn-basis:shell$ echo $C
1+2
sxh@learn-basis:shell$ D=I love you //变量的值如果有空格,需要使用双引号或单引号括起来
/*error
Command 'love' not found, but can be installed with:
sudo snap install love # version 11.2+pkg-d332, or
sudo apt install love # version 11.3-1
See 'snap info love' for additional versions.
*/
sxh@learn-basis:shell$ D="I love you"
sxh@learn-basis:shell$ echo $D
I love you
sxh@learn-basis:shell$ vi hello.sh
写入#!/bin/bash
echo "hello sxh"
echo $C
sxh@learn-basis:shell$ ./hello.sh
hello sxh
//发现并没有打印输出变量C的值。
sxh@learn-basis:shell$ export C //把变量提升为全局环境变量,可供其他Shell程序使用
sxh@learn-basis:shell$ ./hello.sh
hello sxh
1+2 //success
특수 변수
- $n (함수 설명: n은 숫자, $0은 스크립트의 이름, $1-9는 1~9 번째 매개변수를 나타내며 10개 이상의 매개변수를 나타내며 10개 이상의 매개변수는 9와 같이 중괄호로 묶어야 합니다. 첫 번째부터 아홉 번째 매개변수를 나타냅니다. 아홉 번째 매개변수, 10개 이상의 매개변수, 10개 이상의 매개변수는 중괄호로 묶어야 합니다.9는 1~9번째 매개변수를 나타내며 10개 이상의 매개변수는 {10} 과 같이 중괄호로 묶어야 합니다. )
새 파일 쓰기
#!/빈/배시
에코 "$0 $1 $2"
스크립트 파일 이름 출력, 입력 매개변수 1과 입력 매개변수 2의 값, 매개변수 3은 더 이상 출력되지 않음
- $# (함수 설명: 루프에서 자주 사용되는 모든 입력 매개변수의 개수를 구함)
편집 파일 쓰기 echo $#
입력 매개변수 수 가져오기
-
∗ (함수 설명: 이 변수는 명령줄의 모든 매개변수를 나타냅니다. * (함수 설명: 이 변수는 명령줄의 모든 매개변수를 나타냅니다.∗ (기능 설명: 이 변수는 명령줄의 모든 매개변수를 나타냅니다. * 모든 매개변수를 전체적으로 취급합니다.)
@(함수 설명: 이 변수도 명령줄의 모든 매개변수를 나타내지만 @(함수 설명: 이 변수도 명령줄의 모든 매개변수를 나타내지만@ (함수 설명: 이 변수도 명령줄의 모든 매개변수를 나타내지만 @는 각 매개변수를 다르게 취급합니다.)
둘 다 입력된 모든 매개변수를 인쇄합니다.
-
$? (함수 설명: 마지막으로 수행한 명령의 반환 상태. 이 변수의 값이 0이면 이전 명령이 올바르게 수행되었음을 증명하고, 이 변수의 값이 0이 아니면(구체적인 숫자는 명령에 의해 결정됨) 자체), 이전 명령이 잘못 실행되었음을 증명)
sxh@learn-basis:shell$ ./para.sh a b c
./para.sh a b
3
a b c
a b c
sxh@learn-basis:shell$ echo $?
0 //返回0表示正确
운영자
(1) " ( (식) )" 또는 " ( (식)) " 또는 "(( 식 )) ” 또는 " [식]"
(2) expr + , - , *, /, % 더하기, 빼기, 곱하기, 나누기, 나머지 구하기
참고 : expr 연산자 사이에는 공백이 있어야 합니다.
`expr 3 + 2` 先运算加法 \*再运算乘法
조건부 판단
- 기본 문법
[ condition ] (조건 앞뒤에 공백이 있어야 함)
참고: 조건은 비어 있지 않으면 true이고 [ atguigu ]는 true를 반환하고 []는 false를 반환합니다.
- 일반적인 판단 조건
(1) 두 정수의 비교
= 문자열 비교
-lt 보다 작음(보다 작음) -le 보다 작거나 같음(덜 같음)
-eq 같음(같음) -gt 보다 큼(보다 큼)
-ge 크거나 같음(크게 같음) -ne 같지 않음(같지 않음)
(2) 파일 권한에 따른 판단
-r은 읽기 권한을 가짐(read) -w는 쓰기 권한을 가짐(write)
-x는 실행할 수 있는 권한이 있습니다(실행).
(3) 파일 형식에 따른 판단
-f 파일이 존재하고 일반 파일(파일)
-e 파일 존재(existence) -d 파일 존재 및 디렉토리임(디렉토리)
(4) 다중 조건 판단(&&는 이전 명령이 성공적으로 실행된 경우에만 다음 명령이 실행됨을 나타내고 ||는 이전 명령이 실행되지 않은 경우에만 다음 명령이 실행됨)
공정 제어
만약 판단
문법:
if [조건부 판단식];then
프로그램
파이
또는
if [ 조건부 판단식 ]
그 다음에
프로그램
파이
참고 사항:
(1) [조건부 판단식], 대괄호와 조건부 판단식 사이에 공백이 있어야 함
(2) if 뒤에 공백이 있어야 합니다.
데모: 숫자를 입력하고 1이면 I like drink Coke를 출력하고 2이면 I like drink Sprite를 출력하고 그 외이면 아무 것도 출력하지 않습니다.
#!/bin/bash
if [ $1 -eq "1" ];then
echo "I like drinking Coke"
elif [ $1 -eq "2" ]
then
echo "I like to drink Sprite"
fi
사례 진술
문법:
케이스 $ 변수 이름 입력
"값1")
변수의 값이 값 1과 같으면 프로그램 1을 실행한다.
;;
"값2")
변수의 값이 값 2와 같으면 프로그램 2를 실행한다.
;;
...다른 분기 생략...
*)
변수의 값이 위의 값이 아니면 이 프로그램을 실행
;;
에삭
지침:
- 대소문자 줄은 "in"이라는 단어로 끝나야 하며 각 패턴 일치는 닫는 대괄호 ")"로 끝나야 합니다.
- 이중 세미콜론 " ;; "은 명령 시퀀스의 끝을 나타내며 java의 break와 동일합니다.
- 마지막 "*)"는 기본 모드를 나타내며 Java의 기본값과 동일합니다.
데모: 숫자를 입력하고 1이면 I like drink Coke를 출력하고 2이면 I like drink Sprite를 출력하고 그 외이면 아무 것도 출력하지 않습니다.
#!/bin/bash
case $1 in
1)
echo "I like drinking Coke"
;;
2)
echo "I like to drink Sprite"
;;
*)
echo "nothing"
;;
esac
for 루프
기본 구문 1:
for ((초기값; 루프 제어 조건; 변수 변경))
하다
프로그램
완료
데모: 1에서 100까지 더하기
#!/bin/bash
S=0
for((i=0;i<=100;i++))
do
S=$[$S+$i]
done
echo $S
기본 구문 2:
value1 value2 value3의 변수에 대해...
하다
프로그램
완료
데모: 모든 입력 매개변수 출력
sxh@learn-basis:shell$ touch for2.sh
sxh@learn-basis:shell$ vi for2.sh
#!/bin/bash
for i in $*
do
echo "this is a char $i"
done
sxh@learn-basis:shell$ sh for2.sh a
this is a char a
sxh@learn-basis:shell$ sh for2.sh a b
this is a char a
this is a char b
sxh@learn-basis:shell$ sh for2.sh a b c
this is a char a
this is a char b
this is a char c
*와 *를 비교하고∗ 및 @ 차이
(a) * 및 * 및* 와 @는 모두 함수나 스크립트에 전달되는 모든 매개변수를 나타내며 큰따옴표 ""로 묶이지 않으면 모두 $12 ... 2 ...2... 모든 인수를 n 형식으로 출력합니다.
sxh@learn-basis:shell$ vi for2.sh
#!/bin/bash
for i in $*
do
echo "this is a char $i"
done
for j in $@
do
echo "this is a char $j"
done
sxh@learn-basis:shell$ sh for2.sh a
this is a char a
this is a char a
sxh@learn-basis:shell$ sh for2.sh a b
this is a char a
this is a char b
this is a char a
this is a char b
sxh@learn-basis:shell$ sh for2.sh a b c
this is a char a
this is a char b
this is a char c
this is a char a
this is a char b
this is a char c
(b) 큰따옴표 ""로 묶인 경우 "$*"는 모든 매개변수를 전체적으로 "$1 2 ... 2 ...2... n"은 모든 매개변수를 출력하고 "$@"는 각 매개변수를 "$1" " 2 "... "2"..."로 구분합니다.2”…모든 매개변수를 " n" 형식으로 출력합니다
#!/bin/bash
for i in "$*"
do
echo "this is a char $i"
done
for j in "$@"
do
echo "this is a char $j"
done
while 루프
기본 구문:
while [ 조건부 판단식 ]
하다
프로그램
완료
sxh@learn-basis:shell$ touch while.sh
sxh@learn-basis:shell$ vi while.sh
sxh@learn-basis:shell$ cat while.sh
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
s=$[$s+$i]
i=$[$i+1]
done
echo $s
sxh@learn-basis:shell$ sh while.sh
읽기 읽기 콘솔 입력
기본 구문:
읽기(옵션)(매개변수)
옵션:
-p: 값을 읽을 때 프롬프트를 지정합니다.
-t: 값을 읽을 때 대기할 시간(초)을 지정합니다.
매개변수
변수: 값을 읽어올 변수명을 지정합니다.
데모: 프롬프트 후 5초 이내에 콘솔에서 입력한 이름을 읽습니다.
sxh@learn-basis:shell$ touch read.sh
sxh@learn-basis:shell$ vi read.sh
sxh@learn-basis:shell$ cat read.sh
#!/bin/bash
read -t 5 -p "Enter your name in 5 seconds" NAME
echo $NAME
sxh@learn-basis:shell$ sh read.sh
read.sh: 3: read: Illegal option -t
sxh@learn-basis:shell$ bash read.sh
Enter your name in 5 secondsaaaa
aaaa
sxh@learn-basis:shell$
표시되는 오류의 경우:
-s -t 매개변수에 대해 우분투에서 실행
bash read.sh 및 ./read.sh는 올바르게 실행될 수 있지만 sh read.sh는 올바르게 실행되지 않고 오류가 보고됩니다.
read.sh: 4: 읽기: 잘못된 옵션 -t
매개변수 옵션 -n에 대해서도 마찬가지입니다.
기능
시스템 기능
기본 이름 기본 구문:
basename [string / pathname] [suffix] (기능 설명: basename 명령은 마지막('/') 문자를 포함한 모든 접두사를 삭제한 다음 문자열을 표시합니다.
옵션:
suffix는 접미사이며, suffix가 지정되면 basename은 경로 이름이나 문자열에서 접미사를 제거합니다.
dirname 기본 구문:
dirname 파일 절대 경로 (기능 설명: 절대 경로를 포함하는 주어진 파일 이름에서 파일 이름(비디렉토리 부분)을 제거한 다음, 나머지 경로(디렉토리 부분)를 반환)
맞춤 기능
1. 기본 문법
[ 함수 ] funname[()]
{
행동;
[반환 정수;]
}
재미있는 이름
2. 기술
(1) 함수를 호출하기 전에 함수를 선언해야 하며, 쉘 스크립트는 한 줄씩 실행된다. 다른 언어처럼 먼저 컴파일되지 않습니다.
(2) 함수의 반환 값은 표시 및 추가가 가능한 $?시스템 변수를 통해서만 얻을 수 있습니다: 반환 반환, 추가하지 않으면 마지막 명령의 결과가 반환 값으로 사용됩니다. return 다음에 값 n(0-255)이 옵니다.
데모: 두 입력 매개변수의 합 계산
Shell도구
자르다
잘라내기 작업은 "자르기"이며, 특히 파일의 데이터를 잘라내는 역할을 합니다. cut 명령은 파일의 각 행에서 바이트, 문자 및 필드를 잘라내어 출력합니다.
1. 기본 사용법
cut [옵션 매개변수] 파일명
설명: 기본 구분 기호는 탭입니다.
2. 옵션 파라미터 설명
옵션 매개변수 | 기능 |
---|---|
-에프 | 열 번호, 추출할 열 |
-디 | 구분자, 지정된 구분자에 따라 열 분할 |
sxh@learn-basis:shell$ touch cut.txt
sxh@learn-basis:shell$ vi cut.txt
sxh@learn-basis:shell$ cat cut.txt
dong shen
guan zhen
wo wo
lai lai
le le
sxh@learn-basis:shell$ cut -d " " -f 1 cut.txt
dong
guan
wo
lai
le
sxh@learn-basis:shell$ cut -d " " -f 2,3 cut.txt
shen
zhen
wo
lai
le
sxh@learn-basis:shell$ cat cut.txt | grep "guan" | cut -d " " -f 1
guan
//这里是过滤文件找到guan那一行,然后对这一行进行cut
다음으로 컷 시스템 변수를 살펴봅니다.
세드
sed는 한 번에 한 줄씩 콘텐츠를 처리하는 스트림 편집기입니다. 처리할 때 현재 처리 중인 라인을 "패턴 공간"이라고 하는 임시 버퍼에 저장한 후 버퍼의 내용을 sed 명령으로 처리하고 처리가 완료된 후 버퍼의 내용을 다음으로 전송합니다. 화면. 그런 다음 다음 줄을 처리하고 파일이 끝날 때까지 반복합니다. 리디렉션된 저장소 출력을 사용하지 않는 한 파일 내용은 변경되지 않습니다.
- 기본 사용법
sed [옵션] '명령어' 파일명
- 옵션 매개변수 설명
옵션 매개변수 | 기능 |
---|---|
-이자형 | 명령줄 모드에서 직접 sed 작업을 편집합니다. |
- 명령 기능 설명
주문하다 | 기능 설명 |
---|---|
ㅏ | 추가됨, a 다음에 문자열을 연결할 수 있으며 다음 줄에 나타납니다. |
디 | 삭제 |
에스 | 찾기 및 바꾸기 |
sxh@learn-basis:shell$ touch sed.txt
sxh@learn-basis:shell$ vi sed.txt
sxh@learn-basis:shell$ cat sed.txt //数据准备
dong shen
guan zhen
wo wo
lai lai
le le
sxh@learn-basis:shell$ sed '2a hi hao' sed.txt
dong shen //将“hi hao”这个单词插入到sed.txt第二行下,打印。
guan zhen
hi hao
wo wo
lai lai
le le
sxh@learn-basis:shell$ cat sed.txt //文件不会有变化,只是输出有变化
dong shen
guan zhen
wo wo
lai lai
le le
sxh@learn-basis:shell$ sed '/wo/d' sed.txt //删除sed.txt文件所有包含wo的行
dong shen
guan zhen
lai lai
le le
sxh@learn-basis:shell$ sed 's/wo/ni/g' sed.txt //将sed.txt文件中wo替换为ni
dong shen
guan zhen
ni ni
lai lai
le le
sxh@learn-basis:shell$ sed -e '2d' -e 's/wo/ni/g' sed.txt
dong shen //将sed.txt文件中的第二行删除并将wo替换为ni
ni ni
lai lai
le le
sxh@learn-basis:shell$
으악
파일을 한 줄씩 읽고 기본 구분 기호로 공백을 사용하여 각 줄을 슬라이스한 다음 잘린 부분을 분석하고 처리하는 강력한 텍스트 분석 도구입니다.
- 기본 사용법
awk [옵션 매개변수] 'pattern1{action1} pattern2{action2}…' 파일명
패턴: AWK가 데이터에서 찾고 있는 일치 패턴을 나타냅니다.
action: 일치 항목을 찾았을 때 실행할 일련의 명령
- 옵션 매개변수 설명
옵션 매개변수 | 기능 |
---|---|
-에프 | 입력 파일 접기 구분 기호 지정 |
-V | 사용자 정의 변수에 값 할당 |
종류
sort 명령은 Linux에서 매우 유용하며 파일을 정렬하고 정렬된 결과를 표준 출력으로 출력합니다.
- 기초문법
정렬(옵션)(인수)
옵션 | 설명하다 |
---|---|
-N | 숫자 값으로 정렬 |
-아르 자형 | 역순으로 정렬 |
-티 | 정렬 시 사용되는 구분 문자를 설정합니다. |
-케이 | 정렬할 열 지정 |