Shell 프로 그래 밍 | 스 크 립 트 파라미터 와 상호작용 및 일반적인 문제

15398 단어
스 크 립 트 프로그램 을 실행 할 때 스 크 립 트 에 파 라 메 터 를 전달 하고 입력 한 매개 변수 값 에 따라 해당 하 는 데 이 터 를 생 성하 거나 특정한 논 리 를 수행 해 야 합 니 다.
스 크 립 트 에 매개 변수 전달
Shell 스 크 립 트 를 실행 할 때 파 라 메 터 를 가 져 올 수 있 습 니 다. Shell 스 크 립 트 에 변수 가 있 습 니 다.이러한 변수의 이름 은 매우 특별 하 다. 각각 0, 1, 2, 3. 위치 변수 라 고 불 린 다.
 위치 변 수 는 0 에서 시작 합 니 다. 그 중에서 0 변 수 는 실제 스 크 립 트 의 이름 을 저장 하고 1 변 수 는 스 크 립 트 프로그램의 첫 번 째 매개 변수 에 대응 하 며 순서대로 유추 합 니 다.다른 변수 와 마찬가지 로 셸 에서 '$' 기 호 를 통 해 위치 변수의 값 을 참조 할 수 있 습 니 다.
[root@localhost 20190105]# vi paral.sh 
#!/bin/bash
#     
echo 'The script name is '$0
#   1   
echo 'The 1th parameter is '$1
#   2   
echo 'The 2th parameter is '$2
#   3   
echo 'The 3th parameter is '$3
#   4   
echo 'The 4th parameter is '$4
#   5   
echo 'The 5th parameter is '$5
#   6   
echo 'The 6th parameter is '$6
#   7   
echo 'The 7th parameter is '$7
#   8   
echo 'The 8th parameter is '$8
#   9   
echo 'The 9th parameter is '$9
[root@localhost 20190105]# ./paral.sh Ni hao , Nice to meet you !
The script name is ./paral.sh
The 1th parameter is Ni
The 2th parameter is hao
The 3th parameter is ,
The 4th parameter is Nice
The 5th parameter is to
The 6th parameter is meet
The 7th parameter is you
The 8th parameter is !
The 9th parameter is      //  
[root@localhost 20190105]#

사용자 상호작용
read 명령 을 사용 하면 키보드 에서 데 이 터 를 읽 고 지정 한 변 수 를 부여 하여 Shell 스 크 립 트 에서 사용자 와 의 데이터 상호작용 을 실현 할 수 있 습 니 다.
 read 명령 형식
read   1 [  2...]

read 명령 은 키보드 에서 여러 변수의 값 을 읽 을 수 있 습 니 다. 사용자 가 데 이 터 를 입력 할 때 데이터 간 에 빈 칸 이나 Tab 키 로 구 분 됩 니 다.
만약 변수 개수 가 입력 한 데이터 개수 와 같다 면 순서대로 값 을 대응한다.
만약 에 변수 개수 가 입력 한 데이터 개수 보다 크 면 왼쪽 에서 오른쪽으로 대응 하 는 할당 값 입 니 다.데이터 가 없 으 면 대응 하 는 변 수 를 비어 있 습 니 다.
만약 변수 개수 가 입력 한 데이터 개수 보다 적 으 면 왼쪽 에서 오른쪽으로 대응 하 는 값 을 부여 하고 마지막 변 수 는 남 은 모든 데 이 터 를 부여 합 니 다.
read 명령 을 통 해 키보드 에 입력 한 데 이 터 를 읽 어 변수 에 저장 하고 변수 값 을 화면 에 표시 합 니 다. 사용자 가 exit 를 입력 할 때 프로그램 을 끝 냅 니 다.
[root@localhost 20190105]# vi read1.sh 
#!/bin/bash
#       
input1=''                                               #   input1      
input2=''                                               #   input2      
input3=''                                               #   input3      
input4=''                                               #   input4      
#until   ,  input1       exit       
until [ "$input1" = exit ]
do
       echo 'Please input the values:'
#         
       read input1 input2 input3 input4
#      exit                
       if [ "$input1" != exit ]
       then
               echo 'input1: '$input1                  #     input1   
               echo 'input2: '$input2                  #     input2   
               echo 'input3: '$input3                  #     input3   
               echo 'input4: '$input4                  #     input4   
               echo
#     exit           
       else
               echo 'Exit the script.'
       fi
done
[root@localhost 20190105]# chmod +x read1.sh 
[root@localhost 20190105]# ./read1.sh 
Please input the values:
How do you do           //              
input1: How
input2: do
input3: you
input4: do

Please input the values:
Welcome to beijing       //             
input1: Welcome
input2: to
input3: beijing
input4: 

Please input the values:
let's go              //             
input1: let's
input2: go
input3: 
input4: 

Please input the values:
Nice to meet you,too!      //             
input1: Nice
input2: to
input3: meet
input4: you,too!

Please input the values:    //    
exit
Exit the script.
[root@localhost 20190105]#

실행 결 과 를 보면 알 수 있 습 니 다.
  • 변수 개수 가 입력 한 데이터 개수 보다 많 을 때 데이터 와 대응 하 는 변수의 값 이 비어 있 지 않 습 니 다.
  • 변수 개수 가 입력 한 데이터 개수 보다 적 을 때 마지막 변 수 는 나머지 모든 데 이 터 를 부여 합 니 다.

  • 특수 변수
    특수 변수 및 설명
    변수 이름
    설명 하 다.
    $#
    스 크 립 트 에 전 달 된 매개 변수 개수
    $*
    스 크 립 트 에 전 달 된 모든 인자 의 값
    $@
    $* 와 같 음
    $$
    스 크 립 트 실행 에 대응 하 는 프로 세 스 번호
    $!
    배경 에서 실행 중인 마지막 프로 세 스 의 프로 세 스 번호
    $-
    Shell 에서 사용 할 현재 옵션 보이 기
    $?
    명령 의 종료 상 태 를 표시 합 니 다. 0: 정확 합 니 다. 1: 오류 입 니 다.
    [root@localhost 20190105]# vi vall.sh
    #!/bin/bash
    echo 'The value of $# is: '$#           //  $#    
    echo 'The value of $* is: '$*           //  $*    
    echo 'The value of $@ is: '$@           //  $@    
    echo 'The value of $$ is: '$$           //  $$    
    echo 'The value of $! is: '$!           //  $!    
    echo 'The value of $- is: '$-           //  $-    
    echo 'The value of $? is: '$?           //  $?    
    [root@localhost 20190105]# ./vall.sh how do you do
    The value of $# is: 4 //  4    
    The value of $* is: how do you do //  how do you do    
    The value of $@ is: how do you do //  how do you do    
    The value of $$ is: 9040 //  9040    
    The value of $! is:  //      
    The value of $- is: hB //  hB    
    The value of $? is: 0 //  0    
    [root@localhost 20190105]#

    질문
  • 명령 의 출력 결 과 를 어떻게 차단 합 니까? 리 눅 스 는 기본적으로 장치 파일/dev/null (빈 장치) 을 만 들 고 이 장치 에 출력 된 모든 정 보 는 차 단 됩 니 다.명령 의 출력 을 장치/dev/null 로 바 꾸 면 명령 의 출력 결 과 를 차단 할 수 있 습 니 다.
  •    > /dev/null

    명령 의 오류 출력 차단
       2> /dev/null

    명령 의 정상 및 오류 출력 차단
       > /dev/null 2> /dev/null

    예 를 들 어 셸 코드 에서 grep 명령 을 사용 하여 파일 에 키워드 가 있 는 지 찾 으 려 면 화면 grep 명령 의 출력 을 원 합 니 다.
    if grep jack /etc/passwd > /dev/null
    then
     echo "jack found"
    fi

    /etc/passwd 파일 에 jack 키워드 정보 가 있 으 면 jack found 가 표시 되 지만 grep 명령 의 실행 결 과 는 출력 되 지 않 습 니 다.
  • 명령 하 나 를 여러 줄 로 나 누 어 작성 하 는 방법
  • Linux 의 Shell 스 크 립 트 기능 은 매우 강력 합 니 다. 파이프 방식 으로 여러 명령 을 조합 할 수 있 습 니 다. 그러나 이 로 인해 한 줄 의 Shell 스 크 립 트 코드 에서 작 성 된 명령 이 너무 길 어 읽 기 어렵 습 니 다. 스 크 립 트 의 구 조 를 더욱 선명 하 게 하기 위해 한 줄 의 Shell 스 크 립 트 코드 를 여러 줄 로 나 누 어 작성 할 수 있 습 니 다.
    두 개의 파이프 부 호 를 사용 하여 ps, grep, awk 명령 을 조합 합 니 다.
    [root@localhost ~]# ps -ef | grep sshd | awk '{print $2}'
    4478
    12821
    22028

    한 줄 코드 에 여러 명령 을 조합 하여 읽 기 어렵다.Shell 은 한 줄 의 코드 를 여러 줄 로 나 누 어 작성 할 수 있 는 특수 문 자 를 제공 합 니 다.
    [root@localhost ~]# ps -ef | \
    > grep ssh | \
    > awk '{print $2}'
    4478
    12821
    23375
    [root@localhost ~]#

    좋은 웹페이지 즐겨찾기