셸 의 개요, 조작 명령

42536 단어
셸 개요
셸 은 프로그램 / 사용자 명령 을 받 고 운영 체제 커 널 을 호출 하 는 명령 해석 기 입 니 다.
셸 해석 기
(1) Linux 에서 제공 하 는 Shell 해상도 기 는 다음 과 같 습 니 다.
[atguigu@hadoop101 ~]$ cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh

(2) bash 와 sh 의 관계
[atguigu@hadoop101 bin]$ ll | grep bash
-rwxr-xr-x. 1 root root 941880 5   11 2016 bash
lrwxrwxrwx. 1 root root      4 5   27 2017 sh -> bash

(3) Centos 기본 해상도 기 는 bash 입 니 다.
[atguigu@hadoop102 bin]$ echo $SHELL
/bin/bash

Shell 스 크 립 트 입문
1. 스 크 립 트 형식 스 크 립 트 는 \ #! /bin / bash 시작 (해상도 지정) 2. 첫 번 째 셸 스 크 립 트: helloworld (1) 수요: 셸 스 크 립 트 를 만 들 고 helloworld (2) 사례 실 체 를 출력 합 니 다.
[atguigu@hadoop101 datas]$ touch helloworld.sh
[atguigu@hadoop101 datas]$ vi helloworld.sh

hello World. sh 에 다음 내용 을 입력 하 십시오.
#!/bin/bash
echo "helloworld"

(3) 스 크 립 트 의 일반적인 실행 방식 첫 번 째: bash 또는 sh + 스 크 립 트 의 상대 경로 나 절대 경로 (스 크 립 트 + x 권한 부여 하지 않 음) sh + 스 크 립 트 의 상대 경로 사용
[atguigu@hadoop101 datas]$ sh helloworld.sh 
Helloworld
	sh+       
[atguigu@hadoop101 datas]$ sh /home/atguigu/datas/helloworld.sh 
helloworld
	bash+       
[atguigu@hadoop101 datas]$ bash helloworld.sh 
Helloworld
	bash+       
[atguigu@hadoop101 datas]$ bash /home/atguigu/datas/helloworld.sh 
Helloworld

두 번 째: 스 크 립 트 를 입력 하 는 절대 경로 나 상대 경로 로 스 크 립 트 를 실행 합 니 다 (실행 가능 한 권한 + x 가 있어 야 합 니 다) (a) 먼저 helloworld. sh 스 크 립 트 의 + x 권한 을 부여 해 야 합 니 다.
[atguigu@hadoop101 datas]$ chmod 777 helloworld.sh`

(b) 스 크 립 트 실행
    
[atguigu@hadoop101 datas]$ ./helloworld.sh 
Helloworld
    
[atguigu@hadoop101 datas]$ /home/atguigu/datas/helloworld.sh 
Helloworld

메모: 첫 번 째 실행 방법 은 본질 적 으로 bash 해상도 기 가 스 크 립 트 를 실행 하 는 것 이기 때문에 스 크 립 트 자체 가 실행 권한 이 필요 하지 않 습 니 다.두 번 째 실행 방법 은 본질 적 으로 스 크 립 트 가 스스로 실행 되 어야 하기 때문에 실행 권한 이 필요 합 니 다.3. 두 번 째 Shell 스 크 립 트: 다 중 명령 처리 (1) 필요:
 /home/atguigu/       banzhang.txt, banzhang.txt     “I love cls”。

(2) 사례 실습:
[atguigu@hadoop101 datas]$ touch batch.sh
[atguigu@hadoop101 datas]$ vi batch.sh

batch. sh 에 다음 내용 을 입력 하 십시오.
#!/bin/bash

cd /home/atguigu
touch cls.txt
echo "I love cls" >>cls.txt

Shell 의 변수
4.1 시스템 변수
상용 시스템 변수
$HOME、$PWD、$SHELL、$USER 

2. 사례 실 조 (1) 시스템 변수의 값 보기 [
atguigu@hadoop101 datas]$ echo $HOME
/home/atguigu

(2) 현재 셸 의 모든 변 수 를 표시 합 니 다: set
[atguigu@hadoop101 datas]$ set
BASH=/bin/bash
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()

4.2 사용자 정의 변수 1. 기본 문법 (
1)    :  =2)    :unset   
(3)      :readonly  ,  :  unset

2. 변수 정의 규칙 (1) 변수 이름 은 알파벳, 숫자, 밑줄 로 구 성 될 수 있 지만 숫자 로 시작 할 수 없습니다. 환경 변수 이름 은 대문자 로 권장 합 니 다. (2) 등호 양쪽 에 빈 칸 (3) 이 있 으 면 안 됩 니 다. bash 에서 변 수 는 기본 형식 이 문자열 형식 이 므 로 줄 수 치 를 직접 연산 할 수 없습니다. (4)변수의 값 이 빈 칸 이 있 으 면 두 따옴표 나 작은 따옴표 로 묶 어야 합 니 다. 3. 사례 실 조 (1) 정의 변수 A
[atguigu@hadoop101 datas]$ A=5
[atguigu@hadoop101 datas]$ echo $A
5
(2)   A    
[atguigu@hadoop101 datas]$ A=8
[atguigu@hadoop101 datas]$ echo $A
8
(3)    A
[atguigu@hadoop101 datas]$ unset A
[atguigu@hadoop101 datas]$ echo $A
(4)       B=2,  unset

[
atguigu@hadoop101 datas]$ readonly B=2
[atguigu@hadoop101 datas]$ echo $B
2
[atguigu@hadoop101 datas]$ B=9
-bash: B: readonly variable
(5) bash ,             ,          
[atguigu@hadoop102 ~]$ C=1+2
[atguigu@hadoop102 ~]$ echo $C
1+2

(6) 변수의 값 에 빈 칸 이 있 으 면 작은 따옴표 나 작은 따옴표 로 묶 어야 합 니 다.
[atguigu@hadoop102 ~]$ D=I love banzhang
-bash: world: command not found
[atguigu@hadoop102 ~]$ D="I love banzhang"
[atguigu@hadoop102 ~]$ echo $A
I love banzhang
(7)             ,    Shell    
export    
[atguigu@hadoop101 datas]$ vim helloworld.sh 

 helloworld.sh     echo $B
#!/bin/bash

echo "helloworld"
echo $B

[atguigu@hadoop101 datas]$ ./helloworld.sh 
Helloworld
           B  。
[atguigu@hadoop101 datas]$ export B
[atguigu@hadoop101 datas]$ ./helloworld.sh 
helloworld
2

4.3 특수 변수: $n 1. 기본 문법 $n(기능 설명: n 은 숫자 이 고 $0 은 이 스 크 립 트 의 이름 을 대표 합 니 다. $1 - 9 는 첫 번 째 부터 아홉 번 째 매개 변수, 10 이상 의 매개 변 수 를 대표 합 니 다. 10 이상 의 매개 변 수 는 큰 괄호 로 포함 해 야 합 니 다. 예 를 들 어 9 는 첫 번 째 부터 아홉 번 째 매개 변수, 10 이상 의 매개 변 수 를 대표 합 니 다.매개 변수, 10 이상 의 매개 변 수 는 큰 괄호 로 포함 되 어야 합 니 다. 예 를 들 어 {10}) 2. 사례 실 조 (1) 는 이 스 크 립 트 파일 의 이름, 입력 매개 변수 1 과 입력 매개 변수 2 의 값 을 출력 합 니 다.
[atguigu@hadoop101 datas]$ touch parameter.sh 
[atguigu@hadoop101 datas]$ vim parameter.sh
#!/bin/bash
echo "$0  $1   $2"

[atguigu@hadoop101 datas]$ chmod 777 parameter.sh

[atguigu@hadoop101 datas]$ ./parameter.sh cls  xz
./parameter.sh  cls   xz

4.4 특수 변수: $\ # 1. 기본 문법 $\ # (기능 설명: 모든 입력 매개 변수 개 수 를 가 져 오고 순환 에 자주 사용). 2. 사례 실 조 (1) 입력 매개 변수의 개 수 를 가 져 옵 니 다.
[atguigu@hadoop101 datas]$ vim parameter.sh

#!/bin/bash
echo "$0  $1   $2"
echo $#

[atguigu@hadoop101 datas]$ chmod 777 parameter.sh

[atguigu@hadoop101 datas]$ ./parameter.sh cls  xz
parameter.sh cls xz 
2

4.5 특수 변수: ∗, *, ∗, @ 1. 기본 문법 ∗ (기능 설명: 이 변 수 는 명령 줄 의 모든 매개 변 수 를 대표 합 니 다. * (기능 설명: 이 변 수 는 명령 줄 의 모든 매개 변 수 를 대표 합 니 다. ∗ (기능 설명: 이 변 수 는 명령 줄 의 모든 매개 변 수 를 대표 합 니 다. * 모든 매개 변 수 를 하나의 전체 로 봅 니 다) @(기능 설명: 이 변 수 는 명령 줄 의 모든 매개 변 수 를 대표 합 니 다. 그러나 @ (기능 설명: 이 변 수 는 명령 줄 의 모든 매개 변 수 를 대표 합 니 다. 그러나 @ (기능 설명: 이 변 수 는 명령 줄 의 모든 매개 변 수 를 대표 합 니 다. 그러나 @ 매개 변 수 를 구분 합 니 다) 2. 사례 실 조 (1) 입력 한 모든 매개 변 수 를 인쇄 합 니 다.
[atguigu@hadoop101 datas]$ vim parameter.sh

#!/bin/bash
echo "$0  $1   $2"
echo $#
echo $*
echo $@

[atguigu@hadoop101 datas]$ bash parameter.sh 1 2 3
parameter.sh  1   2
3
1 2 3
1 2 3

4.6 특수 변수: $? 1. 기본 문법 $?helloworld. sh 스 크 립 트 가 올 바 르 게 실행 되 었 는 지 판단 합 니 다.
[atguigu@hadoop101 datas]$ ./helloworld.sh 
hello world
[atguigu@hadoop101 datas]$ echo $?
0

연산 자
1. 기본 문법 (1) "(연산 식)" 또는 "(연산 식)" 또는 "(연산 식)" 또는 "[연산 식]" (2) expr +, -, *, /,% 더하기, 빼 기, 나 누 기, 나머지 주의: expr 연산 자 사이 에 빈 칸 이 있어 야 합 니 다. 2. 사례 실 조: (1) 3 + 2 의 값 을 계산 합 니 다.
[atguigu@hadoop101 datas]$ expr 2 + 3
5

(2) 3 - 2 의 값 을 계산한다.
[atguigu@hadoop101 datas]$ expr 3 - 2 
1

(3) 계산 (2 + 3) X4 의 값 (a) expr 한 걸음 에 계산 완료
[atguigu@hadoop101 datas]$ expr `expr 2 + 3` \* 4
20

(b) $[연산 식] 방식 사용
[atguigu@hadoop101 datas]# S=$[(2+3)*4]
[atguigu@hadoop101 datas]# echo $S

조건 부 판단
1. 기본 문법 [condition] (주의 condition 전후 에 빈 칸 이 있어 야 함) 주의: 조건 이 비어 있 지 않 으 면 true 이 고, [atguigu] 는 true 로 돌아 가 고, [] 는 false 로 돌아간다. 2. 상용 판단 조건 (1) 두 정수 간 비교
=      
-lt   (less than)			-le     (less equal)
-eq   (equal)				-gt   (greater than)
-ge     (greater equal)	-ne    (Not equal)

(2) 파일 권한 에 따라 판단
-r      (read)			-w      (write)
-x       (execute)

(3) 파일 형식 에 따라 판단
-f               (file)
-e     (existence)		-d           (directory)

3. 사례 실 기
123      22
[atguigu@hadoop101 datas]$ [ 23 -ge 22 ]
[atguigu@hadoop101 datas]$ echo $?
02)helloworld.sh       
[atguigu@hadoop101 datas]$ [ -w helloworld.sh ]
[atguigu@hadoop101 datas]$ echo $?
03/home/atguigu/cls.txt          
[atguigu@hadoop101 datas]$ [ -e /home/atguigu/cls.txt ]
[atguigu@hadoop101 datas]$ echo $?
14)     (&&             ,        ,||             ,        )
[atguigu@hadoop101 ~]$ [ condition ] && echo OK || echo notok
OK
[atguigu@hadoop101 datas]$ [ condition ] && [ ] || echo notok
notok

프로 세 스 제어 (중점)
7.1 if 판단
1if [       ];then 
     
fi 
   
if [       ] 
  then 
       
elif [       ]
	then
		  
else
	  
fi

주의사항: (1) [조건 판단 식], 중 괄호 와 조건 판단 식 사이 에 빈 칸 (2) if 가 있어 야 합 니 다.
[atguigu@hadoop101 datas]$ touch if.sh
[atguigu@hadoop101 datas]$ vim if.sh

#!/bin/bash

if [ $1 -eq "1" ]
then
        echo "banzhang zhen shuai"
elif [ $1 -eq "2" ]
then
        echo "cls zhen mei"
fi

[atguigu@hadoop101 datas]$ chmod 777 if.sh 
[atguigu@hadoop101 datas]$ ./if.sh 1
banzhang zhen shuai

7.2 case 구문 1. 기본 문법
case $    in 
  " 1"11 
    ;; 
  " 2"22 
    ;; 
  …      … 
  *) 
                 ,       
    ;; 
esac

주의사항: 1) case 줄 끝 은 단어 "in" 이 어야 합 니 다. 모든 패턴 이 일치 하려 면 오른쪽 괄호 ")" 로 끝내 야 합 니 다. 2) 더 블 분점 ";" 명령 시퀀스 가 끝 났 음 을 나타 내 며 자바 의 break 에 해당 합 니 다. 3) 마지막 "*)" 는 기본 모드 로 자바 의 default 에 해당 합 니 다. 2. 사례 실 조
1)      ,   1,   banzhang,   2,   cls,     ,  renyao。
[atguigu@hadoop101 datas]$ touch case.sh
[atguigu@hadoop101 datas]$ vim case.sh

!/bin/bash

case $1 in
"1")
        echo "banzhang"
;;

"2")
        echo "cls"
;;
*)
        echo "renyao"
;;
esac

[atguigu@hadoop101 datas]$ chmod 777 case.sh
[atguigu@hadoop101 datas]$ ./case.sh 1
1

7.3 for 순환
11
	for ((    ;      ;     )) 
  do 
       
  done

2. 사례 실 기
11  100
[atguigu@hadoop101 datas]$ touch for1.sh
[atguigu@hadoop101 datas]$ vim for1.sh

#!/bin/bash

s=0
for((i=0;i<=100;i++))
do
        s=$[$s+$i]
done
echo $s

[atguigu@hadoop101 datas]$ chmod 777 for1.sh 
[atguigu@hadoop101 datas]$ ./for1.sh 
“5050

3. 기본 문법 2
for    in  1  2  3… 
  do 
       
  done

4. 사례 실 기
1[atguigu@hadoop101 datas]$ touch for2.sh
[atguigu@hadoop101 datas]$ vim for2.sh

#!/bin/bash
#    

for i in $*
    do
      echo "ban zhang love $i "
    done

[atguigu@hadoop101 datas]$ chmod 777 for2.sh 
[atguigu@hadoop101 datas]$ bash for2.sh cls xz bd
ban zhang love cls
ban zhang love xz
ban zhang love bd

(2) 8727 ℃ 와 * 와 8727 ℃ 와 @ 의 차이 점 (a) 을 비교 합 니 다.
[atguigu@hadoop101 datas]$ touch for.sh
[atguigu@hadoop101 datas]$ vim for.sh

#!/bin/bash 

for i in $*
do
      echo "ban zhang love $i "
done

for j in $@
do      
        echo "ban zhang love $j"
done

[atguigu@hadoop101 datas]$ bash for.sh cls xz bd
ban zhang love cls 
ban zhang love xz 
ban zhang love bd 
ban zhang love cls
ban zhang love xz
ban zhang love bd

(b) 따옴표 "" 에 포 함 될 때 "$*" 는 모든 인 자 를 하나의 전체 로 하고 "$1 2... 2... 2... n" 형식 으로 모든 인 자 를 출력 합 니 다. "$@" 은 각 인 자 를 분리 하여 "$1", "2"... "n" 형식 으로 모든 인 자 를 출력 합 니 다.
[atguigu@hadoop101 datas]$ vim for.sh

#!/bin/bash 

for i in "$*" 
#$*for         
        do 
                echo "ban zhang love $i"
        done 

for j in "$@" 
#$@             ,  “$@”      ,       
        do 
                echo "ban zhang love $j" 
done

[atguigu@hadoop101 datas]$ chmod 777 for.sh
[atguigu@hadoop101 datas]$ bash for.sh cls xz bd
ban zhang love cls xz bd
ban zhang love cls
ban zhang love xz
ban zhang love bd

7.4 while 순환
1.    
while [       ] 
  do 
      
  done

2. 사례 실 기 (사례 실 기)
11  100
[atguigu@hadoop101 datas]$ touch while.sh
[atguigu@hadoop101 datas]$ vim while.sh

#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
        s=$[$s+$i]
        i=$[$i+1]
done

echo $s

[atguigu@hadoop101 datas]$ chmod 777 while.sh 
[atguigu@hadoop101 datas]$ ./while.sh 
5050

read 읽 기 콘 솔 입력
1. 기본 문법
read(  )(  )-p:          ;
-t:           ( )。
  
	  :         

2. 사례 실 기 (1) 는 7 초 동안 콘 솔 에서 입력 한 이름 을 읽 습 니 다.
[atguigu@hadoop101 datas]$ touch read.sh
[atguigu@hadoop101 datas]$ vim read.sh

#!/bin/bash

read -t 7 -p "Enter your name in 7 seconds " NAME
echo $NAME

[atguigu@hadoop101 datas]$ ./read.sh 
Enter your name in 7 seconds xiaoze
xiaoze

함수.
9.1 시스템 함수
1.basename    
basename [string / pathname] [suffix]  	
(    :basename                (‘/’)  ,
          。
  :
suffix   ,  suffix    ,basename  pathname string  suffix  。

2. 사례 실 기
1/home/atguigu/banzhang.txt       
[atguigu@hadoop101 datas]$ basename /home/atguigu/banzhang.txt 
banzhang.txt
[atguigu@hadoop101 datas]$ basename /home/atguigu/banzhang.txt .txt
banzhang

  • 	dirname    
    	dirname       		(    :                    (      ),         (     ))
    4.    
    (1)  banzhang.txt     
    [atguigu@hadoop101 ~]$ dirname /home/atguigu/banzhang.txt 
    /home/atguigu
    

    사용자 정의 함수
    1. 기본 문법
    [ function ] funname[()]
    {
    	Action;
    	[return int;]
    }
    funname
    

    2. 경험 치 기술 (1) 은 함 수 를 호출 하기 전에 함 수 를 먼저 밝 혀 야 합 니 다. 셸 스 크 립 트 는 한 줄 씩 실 행 됩 니 다. 다른 언어 처럼 먼저 컴 파일 되 지 않 습 니 다. (2) 함수 반환 값 은 $? 시스템 변 수 를 통 해서 만 얻 을 수 있 습 니 다. 추가: return 반환, 추가 하지 않 으 면 마지막 명령 으로 결 과 를 실행 합 니 다. return 뒤꿈치 n (0 - 255)3. 사례 실 조 (1) 는 두 개의 입력 매개 변수의 합 을 계산한다.
    [atguigu@hadoop101 datas]$ touch fun.sh
    [atguigu@hadoop101 datas]$ vim fun.sh
    
    #!/bin/bash
    function sum()
    {
        s=0
        s=$[ $1 + $2 ]
        echo "$s"
    }
    
    read -p "Please input the number1: " n1;
    read -p "Please input the number2: " n2;
    sum $n1 $n2;
    
    [atguigu@hadoop101 datas]$ chmod 777 fun.sh
    [atguigu@hadoop101 datas]$ ./fun.sh 
    Please input the number1: 2
    Please input the number2: 5
    7
    

    좋은 웹페이지 즐겨찾기