天天看點

Shell Scripts基本知識

變量:    

    變量就是可變化的量,有名稱的記憶體空間,shell 中把變量預設為 字元型

命名規則:

         1.隻能包含字母、數字和下劃線,并且不能以數字開頭

         2.不能與關鍵字沖突

         3.盡量做到見名知義

引号:

     單引号:'        強引用

     雙引号:"        弱引用 -- 可以實作變量替換      eg:  echo   $HOSTNAME "

     反引号: `        指令替換   <==>  $(command)    eg:  echo   " hello everone `ls  /tmp`"

變量引用:

    $VAR_NAME

    ${VAR_NAME}

    set VAR_NAME=value

    unset VAR_NAME

    變量事先聲明:

  declare   [options]   VAR_NAME

       options:            -i : ×××                                  eg:  declare  -i   SUM=0

           -x :環境變量

           -a :數組

           -r :隻讀變量,值不能改變并且不能撤消

            指令行展開:

       ~:使用者家目錄

       ~USERNAME : 指定使用者的家目錄

     {}:類似多項式展開     eg:   #  mkdir  -p    /tmp/{lcok,date,kill/{fuck,this}}

      變量的種類:

    環境變量:  對目前shell及其子shell都有效   

            設定:    declaer   -x  VAR_NAME=value

                      expore   VAR_NAME=value

            取消:    unset  VAR-NAME

            顯示環境變量:  export

                           printenv

    本地變量(局部變量):    作用域為目前shell(對父shell和子shell無效)

                              local NAME=....

    特殊變量:

          $? :引用上一條指令的執行狀态傳回值

               0 :成功

               1-255:失敗,1 ,2,127 --&gt;系統預留

                                     readonly  :設定隻讀變量        eg: # readmonly  NAME=jerry

                        位置變量:   

       位置變量用于引用傳遞過來的參數: ${1} ,${2} ...${11}

bash如何實作指令展開:

      1.切片 :以space ,tab , enter分隔(詞法分析)

      2.别名替換:指令行展開 ,$ ,{} ,()

      3. 可能需要重複進行1和2

      4. 實作重定向: &gt; ,&gt;&gt;  , <

      5. 執行指令

   阻止展開:

       轉義符:\ 

       單引号:' '               

       ;:分号能實作語句的分割

      指令的邏輯關系:

    與關系 : 雙目操作符

        & :位與      0011011    01010101

        && :邏輯與       [ $A  -eq  0 ]  &&  echo "Hello body !"

      或關系 :  | : 位或

                 || : 邏輯或

      非關系 :            !                          條件測試:

      test  expression                        

      [ expression ]            -->  expression前後有空格  

      ` expession `           -->;關鍵字

                      條件測試類型:

     整數比較:    [   ]

          雙目操作: num1  操作符 num2

              -eq : =     eg:  [ 2 -eq 3 ]  ,` 2 -eq 3 `

              -gt : &gt;   大于

              -lt  : <    小于

              -ge : >=

              -le : <=

              -ne : !=

     字元串測試 :  [[   ]]     需要用 -->雙中括号   eg: [[ string1 <  string2 ]]

                  >

                  <

                  >=

                  <=

                  !=

                  == 

       單目: 

             [ -z  "abc" ]  :測試string是否為空,為空則真,否則為假 

             [  -n string  ]:            為空則假,否則為真

    檔案測試 : 

             -e  /path/to    : 測試檔案是否存在         eg:    [ -e  /etc/inittab ]

             -f  /path/to   : 為普通檔案

             -d  /path/to   :  測試目錄是否存在

             -r             :讀權限

             -w           :寫權限

             -x            :可執行權限 算術運算:

        $(( expession ))

        $[expression]

     常用方法:

          1.指派給變量

          2.使用echo 回顯

                                                                      SUM=$(($A+$B))

let VAR_NAME=NUM1 OP NUM2

                                    echo VAR_NAME

                    expr num1 op num2         

                            + :

                            -

                            *

                            /

                            %

  連接配接兩個條件:

        -a :與關系

        -o : 或關系

       !  : 非關系

      if :

       if   測試條件 ;then

             statement1;                    ...

             else    

              statement2;

                   ...

             fi

                           eg:     if  [ SUM  -eq  0 ] ; then                                                                      echo "hello  world !"

                                                     else     echo "No,sorry!"                                                      fi

循環執行: for

             for    變量  in  清單; do

                            statement1

                            statemetn2

                                ...

             done

         清單表示法:

                    { }   :eg -->{1..100}  --&gt; 1到100

                                   `seq 1 100`  :   --&gt;eg:偶數 `seq 2 2 100`  可以控制步進

                                   `COMMAND`   : 元素分割符是空格或換行符  eg: `ls /var`

               while

             while  條件 ; do

                           循環體

            done

                                    eg: while read LINE ;do     按行讀取檔案内容進行處理

                                            ...

                                        done < /etc/passwd

            until 

             until  條件 ; do

                        循環體

case 

            case  變量  in 

                        取值1)

                                        語句

                                        ;;

                        取值2) 

                             *)

           esac              break :停止循環

continue:提前結束目前循環,而後進入下一次循環

    RETVAL=$?

        位置變量:

            # ./name.sh     A   B   C   D

                 $0        $1    $2   $3 $4   如何與使用者互動:

                read  VAR_NAME

                        -p  : " "                eg: read -p "Please input your name :"  NAME

                        -t    : bash指令的選項:

                -n :用于測試腳本的文法錯誤

                -x :調試執行,顯示腳本調試執行過程中的詳細過程

                -v  在運作 sccript 前,先将 scripts 的内容輸出到螢幕上

                ++ :VAR++  ,++VAR

                        VAR++ : 先引用 ,後自加        eg:        let VAR++    &lt;-->    VAR=$[ $VAR+1 ]

                        ++VAR : 先自加,後引用

                -- :    VAR--  ,--VAR

                        +=  --&gt; eg:     let SUM+=$I  <-->  SUM=$(($SUM+$I))

                        -=

                        *=

                        /=

        指定退出腳本:

                狀态傳回值:0  1--&gt;255

            exit

        随機數:RANDOM

         輸出菜單:  --&gt;cat

        #  cat &lt;&lt;EOF

        1.Please input your name:

        2.Please input your telephone number:

        3.Please input your address:

        4.Quit

        EOF     function 

               bash 中定義函數的兩種方法:

                1. function  FUNC_NAME{

                        body

                        }

               2. FUNC_NAME() {

                            body;

                            }

        函數的傳回值:是函數調用時所執行的函數體中的最後一條語句的狀态傳回值;

        自定義函數傳回值:  return #

上一篇: nginx
下一篇: c++11 lambda

繼續閱讀