쉘 스크립트 기본 튜토리얼, 빠르게 시작하기

첫 번째 쉘 스크립트: helloworld

스크립트는 #!/bin/bash로 시작합니다(파서 지정).

다음으로 helloworld를 출력하는 셸 스크립트를 만듭니다.

  1. hello.sh를 터치합니다.

  2. 쓰기 명령

    #!/빈/배시

    에코 "안녕하세요"

  3. 저장 후 실행, 그림은 절대경로와 상대경로 실행으로 구분되며, 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

특수 변수

  1. $n (함수 설명: n은 숫자, $0은 스크립트의 이름, $1-9는 1~9 번째 매개변수를 나타내며 10개 이상의 매개변수를 나타내며 10개 이상의 매개변수는 9와 같이 중괄호로 묶어야 합니다. 첫 번째부터 아홉 번째 매개변수를 나타냅니다. 아홉 번째 매개변수, 10개 이상의 매개변수, 10개 이상의 매개변수는 중괄호로 묶어야 합니다.9는 1~9번째 매개변수를 나타내며 10개 이상의 매개변수는 {10} 과 같이 중괄호로 묶어야 합니다. )

새 파일 쓰기

#!/빈/배시

에코 "$0 $1 $2"

여기에 이미지 설명 삽입

스크립트 파일 이름 출력, 입력 매개변수 1과 입력 매개변수 2의 값, 매개변수 3은 더 이상 출력되지 않음

  1. $# (함수 설명: 루프에서 자주 사용되는 모든 입력 매개변수의 개수를 구함)

편집 파일 쓰기 echo $#

입력 매개변수 수 가져오기

여기에 이미지 설명 삽입

  1. ∗ (함수 설명: 이 변수는 명령줄의 모든 매개변수를 나타냅니다. * (함수 설명: 이 변수는 명령줄의 모든 매개변수를 나타냅니다.(기능 설명: 이 변수는 명령줄의 모든 매개변수를 나타냅니다. * 모든 매개변수를 전체적으로 취급합니다.)

    @(함수 설명: 이 변수도 명령줄의 모든 매개변수를 나타내지만 @(함수 설명: 이 변수도 명령줄의 모든 매개변수를 나타내지만@ (함수 설명: 이 변수도 명령줄의 모든 매개변수를 나타내지만 @는 각 매개변수를 다르게 취급합니다.)

    둘 다 입력된 모든 매개변수를 인쇄합니다.

  2. $? (함수 설명: 마지막으로 수행한 명령의 반환 상태. 이 변수의 값이 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` 先运算加法   \*再运算乘法

조건부 판단

  1. 기본 문법

[ condition ] (조건 앞뒤에 공백이 있어야 함)

참고: 조건은 비어 있지 않으면 true이고 [ atguigu ]는 true를 반환하고 []는 false를 반환합니다.

  1. 일반적인 판단 조건

(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를 실행한다.

;;

...다른 분기 생략...

*)

변수의 값이 위의 값이 아니면 이 프로그램을 실행

;;

에삭

지침:

  1. 대소문자 줄은 "in"이라는 단어로 끝나야 하며 각 패턴 일치는 닫는 대괄호 ")"로 끝나야 합니다.
  2. 이중 세미콜론 " ;; "은 명령 시퀀스의 끝을 나타내며 java의 break와 동일합니다.
  3. 마지막 "*)"는 기본 모드를 나타내며 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 명령으로 처리하고 처리가 완료된 후 버퍼의 내용을 다음으로 전송합니다. 화면. 그런 다음 다음 줄을 처리하고 파일이 끝날 때까지 반복합니다. 리디렉션된 저장소 출력을 사용하지 않는 한 파일 내용은 변경되지 않습니다.

  1. 기본 사용법

sed [옵션] '명령어' 파일명

  1. 옵션 매개변수 설명
옵션 매개변수 기능
-이자형 명령줄 모드에서 직접 sed 작업을 편집합니다.
  1. 명령 기능 설명
주문하다 기능 설명
추가됨, 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$ 

으악

파일을 한 줄씩 읽고 기본 구분 기호로 공백을 사용하여 각 줄을 슬라이스한 다음 잘린 부분을 분석하고 처리하는 강력한 텍스트 분석 도구입니다.

  1. 기본 사용법

awk [옵션 매개변수] 'pattern1{action1} pattern2{action2}…' 파일명

패턴: AWK가 데이터에서 찾고 있는 일치 패턴을 나타냅니다.

action: 일치 항목을 찾았을 때 실행할 일련의 명령

  1. 옵션 매개변수 설명
옵션 매개변수 기능
-에프 입력 파일 접기 구분 기호 지정
-V 사용자 정의 변수에 값 할당

종류

sort 명령은 Linux에서 매우 유용하며 파일을 정렬하고 정렬된 결과를 표준 출력으로 출력합니다.

  1. 기초문법

정렬(옵션)(인수)

옵션 설명하다
-N 숫자 값으로 정렬
-아르 자형 역순으로 정렬
-티 정렬 시 사용되는 구분 문자를 설정합니다.
-케이 정렬할 열 지정

추천

출처blog.csdn.net/qq_44333320/article/details/126602266