bash 셸 스 크 립 트 프로 그래 밍 학습 총화 1

9993 단어 linux
셸 스 크 립 트 프로 그래 밍
   -------     
    :     ,   (  );          。C/C++/JAVA/C#
    :     ,   。      。PHP,SHELL,python,perl
    :shell,c;    :java,python,perl,c++
    :VAR_NAME = VALUE;

bash    :
        :      shell       。
        export VARNAME=VALUE   VARNAME=VALUE export VARNAME "  "       。
                    shell  :
        [root@iZ233y80y23Z ~]# NAME=LINJUNBIN
        [root@iZ233y80y23Z ~]# export NAME
        [root@iZ233y80y23Z ~]# echo $NAME
        LINJUNBIN
        [root@iZ233y80y23Z ~]# bash   //    shell;
        [root@iZ233y80y23Z ~]# echo $NAME  //         。
        LINJUNBIN

        (    ):
          bash  :    :VARNAME=VALUE 
            :           。local VARNAME=VALUE
        :
        $1,$2,....
        :(bash  ):$?:                ;
                    ;    $?=0-255
        0:    ;1-255:    ;
        1,2,127:    。
        $?:           ;
        $#:     
        $*:    
        $@:                

    :${VAR_NAME},     。
    [root@iZ233y80y23Z ~]# echo "there are some ${ANIMAL}s."
    there are some PIGs.
    [root@iZ233y80y23Z ~]# echo 'there are some ${ANIMAL}s.'
    there are some ${ANIMAL}s.
      :''    ""      。

     :
    >:>>:2>:2>>,&>  
  :
    /dev/null:    ;/dev/null:    ;
    eg:          。
        [root@iZ233y80y23Z ~]# id student &> /dev/null
        [root@iZ233y80y23Z ~]# echo $?
        1
    :
    unset VARNAME   $;
    :
      set  ;set:           ;
          :printenv ,env, export;     。
eg:
    [root@iZ233y80y23Z ~]# ANIMALS=pig
    [root@iZ233y80y23Z ~]# ANIMALS=$ANIMALS:goat
    [root@iZ233y80y23Z ~]# echo $ANIMALS
    pig:goat    
  :     ,       
        :id user1 &> /dev/null && echo "hello user1";
    [root@iZ233y80y23Z test]# id root &> /dev/null && echo 'root'
    root

셸 조건 판단
      $?                      。
    :
    -eq:          ;
    -ne:          ,  ,  ;  ,  ;
    -gt:             ;
    -lt:             ;
    -ge:      ;
    -le:      ;
    eg:
            [root@iZ233y80y23Z test]# A=3
            [root@iZ233y80y23Z test]# B=4
            [root@iZ233y80y23Z test]# [ $A -eq $B ]
            [root@iZ233y80y23Z test]# echo $?
            1
            [root@iZ233y80y23Z test]# B=3
            [root@iZ233y80y23Z test]# [ $A -eq $B ]
            [root@iZ233y80y23Z test]# echo $?
        0
    :
    :

       :  :     。
    [ expression    ],[[ expression ]] , test expression
   :

        ;
       :&&,                ,       。
       :||        ,          。          。
    eg:    user6   ,     user6
        ! id user6 &> /dev/null && useradd user6
        id user6 &> /dev/null || useradd user6
LINE=`wc -l /etc/inittab`;              。   
eg:    /etc/inittab       100,        ,       。
        [root@iZ233y80y23Z test]# cat souce.sh 
        #!/bin/bash     
        LINES=`wc -l /etc/inittab`      
        echo $LINES        
        FINLINES=`echo $LINES | cut -d' ' -f1`
        echo $FINLINES;    

        [ $FINLINES -gt 100 ] && echo "/etc/inittab is a big file." || echo "/etc/inittab is a small file"

        [root@iZ233y80y23Z test]# bash souce.sh 
        17 /etc/inittab
        17
        /etc/inittab is a small fi

eg:       :
`! id user1 &> /dev/null && useradd user1 && echo "user1" | passwd --stdin user1 &> /dev/null || echo 'user1 exists`
         ,   passwd。      ;       。
    [root@iZ233y80y23Z test]# bash addUser.sh 
    user1 exists
    39
    [root@iZ233y80y23Z test]# cat addUser.sh 
    #!/bin/bash 
    ! id user1 &> /dev/null && useradd user1 && echo "user1" | passwd --stdin user1 &> /dev/null || echo 'user1 exists'
    ! id user2 &> /dev/null && useradd user2 && echo "user2" | passwd --stdin user2 &> /dev/null || echo 'user2 exists'
    ! id user3 &> /dev/null && useradd user3 && echo "user3" | passwd --stdin user3 &> /dev/null || echo 'user3 exists'     
    #     
    LINES=`wc -l /etc/passwd | cut -d' ' -f1`
    echo $LINES;

    eg:
    #         root  ;
            [root@iZ233y80y23Z test]# bash is_root.sh 
            is root
            [root@iZ233y80y23Z test]# cat is_root.sh 
            #!/bin/bash
            USER_UID=`id -u`;
            [ $USER_UID -eq 0 ] && echo 'is root' || echo "is not root and this uid is ${UID}"
          :  is_root.sh: line 2: UID: readonly variable,   UID           ,      。

조건 판단
    if  :
    if      
    then 
        statement1;statement2; 
    fi
   if  :
    if     ; then 
        statement1;statement2;... 
    else 
        statement3;statement4;... 
    fi
   if  
    if     1; then
        statement1;...
    elif     2; then
        statement2;...
    elif     3; then
        statement3;...
    ...
    else
        statement4;...
    fi

eg:
    #          :
    [root@iZ233y80y23Z test]# bash user.sh 
    user12 IS NOT exists
    [root@iZ233y80y23Z test]# cat user.sh 
    #!/bin/bash 
    NAME=user12;        
    if id $NAME &> /dev/null; then
    echo "$NAME is exists"
    else
    echo "$NAME IS NOT exists"
    fi
    #           ,          ;

eg:
#              shell bash:   ,      ,           
        [root@iZ233y80y23Z test]# ./is_bash.sh 
        the shells of 10 users is bash shell
        [root@iZ233y80y23Z test]# cat is_bash.sh 
        #!/bin/bash
        #     shell bash
        grep "bash$" /etc/passwd &> /dev/null;
        RETVAL=$?;
        if [ $RETVAL -eq 0 ]; then
          USERS=`grep "\ /dev/null;
        HAS_SPACE=$?
        if [ $HAS_SPACE -eq 0 ] ; then
        SPACES=`grep "^$" /etc/inittab | wc -l`;
        echo "total SPACES is $SPACES LINES";
        else
        echo "no any spaces in /etc/inittab";
        fi
        [root@iZ233y80y23Z test]# 
      :         ;

#     uid    GID,      
        [root@iZ233y80y23Z test]# cat uid_eq.sh 
        #!/bin/bash
        USERNAME=user1
        #USERID=`id -u $USERNAME`;
        USERID=`grep "^user1" /etc/passwd | cut -d: -f3`
        GROUPID=`grep "^user1" /etc/passwd | cut -d: -f4`
        #GROUPID=`id -g $USERNAME`;

        if [ $USERID -eq $GROUPID ] ; then
        echo 'Good guy';
        else
        echo 'Bad guy';
        fi
#  :date +%s      1970     ;man date
echo $HISTSIZE;

#               
#    ;bash -x
    eg:         。bash -x
        [root@iZ233y80y23Z test]# bash -x file_test.sh 
        + FILE=/etc/inittab
        + '[' -e /etc/inittab ']'
        + echo OK
        OK
        [root@iZ233y80y23Z test]#

#      ,        ,   ,        ,           。
    [root@iZ233y80y23Z test]# ./file_test.sh 
    common file
    [root@iZ233y80y23Z test]# cat file_test.sh 
    #!/bin/bash

    FILE=/etc/inittab

    if [ ! -e $FILE ]; then
    echo 'no such file';
    exit 6;
    fi      
    if [ -f $FILE ]; then
    echo 'common file';
    elif [ -d $FILE ]; then
    echo 'directory';
    else
    echo 'unknown';
    fi
      :   !        ;

셸 에서 산술 연산 을 진행 하 다.
shell             ;
    [root@iZ233y80y23Z test]# A=3
    [root@iZ233y80y23Z test]# B=4
    [root@iZ233y80y23Z test]# echo $A+$B
    3+4
    1,2,3     :
1、    let:
    let C=$A+$B
2、$[       ]
    C=$[$A+$B]
3、$((       ))
    C=$(($A+$B))
4、expr        ,                  ,        
    F=`expr $A + $B`
5、     bc   

스 크 립 트 종료
exit:    ;  
exit n;n      ;
               ,  ,                    ;

테스트 방법
        :
[ expression ]:        ,     ;
[[ expression ]]:      ;
test expression:
    -gt,-le,-ne,-eq,-ge,-lt:       ,            。
if `grep "^$USERNAME\>" /etc/passwd` ; then

    :
    -e FILE:      。
    -f FILE:           
    -d FILE:           ;
    -r FILE:                 
    -w FILE:                 
    -x FILE:                  
    eg:
    [ -e /etc/inittab ] ,[ -x /etc/rc.d/rc.sysinit ]
        [root@iZ233y80y23Z test]# ./exitst_file.sh 
        NO /etc/iniittab
        [root@iZ233y80y23Z test]# cat exitst_file.sh 
        #!/bin/bash

        FILE=/etc/iniittab
        if [ ! -e $FILE ] ; then
          echo "NO $FILE"
          exit 8;
        fi

  :         ;/
      :
    [root@iZ233y80y23Z test]# history | tail -1 | cut -d' ' -f2
    1012    

위치 변수 (매개 변수)
    $1,$2,...
./file_test.sh /etc/fstab /etc/inittab;
$1:/etc/fstab;   $2:/etc/inittab;
shift:             ;       shift       ;
shift n:      n   ;

#  :      ,            OK,        no such file
    eg:$#:        ;$*:     $@:    ;
            [root@iZ233y80y23Z test]# ./exitst_file.sh /etc/inittab /ffff /ttddd
            3
            /etc/inittab /ffff /ttddd
            /etc/inittab /ffff /ttddd
            OK
            [root@iZ233y80y23Z test]# cat exitst_file.sh 
            #!/bin/bash
            echo $#
            echo $*
            echo $@

            if [ ! $1 ]; then
             echo 'please add parame file'; 
            exit;
            fi

            if [ -e $1 ] ; then
              echo "OK"
            else
              echo "no such file";
            fi
            [root@iZ233y80y23Z test]#

#  shift
        [root@iZ233y80y23Z test]# ./shift.sh 1 2 3 4 5
        5
        1
        2
        4
        [root@iZ233y80y23Z test]# cat shift.sh 
        #!/bin/bash

        echo $#;
        echo $1;
        shift
        echo $1;
        shift 2
        echo $1

좋은 웹페이지 즐겨찾기