linux歷程--shell腳本基本編程

1)shell腳本第一行必須是如下格式:
      #!/bin/sh
   符號#!用來指定該腳本文件的解析程序。上面就是使用/bin/sh來解析該腳本,
   編輯好後,要執行該腳本,還必須有可執行屬性:
      chmod +x filename
注:可在終端輸入 cat  /etc/passwd 指令查看linux爲各用戶預設的shell解析器。

如:   root:x:0:0:root:/root:/bin/bash

           wm:x:1000:1000:wm,,,:/home/wm:/bin/bash

      表示爲root用戶和wm用戶預設的bash解析。


2)#開頭表示註釋,直到該行結束


3)變量沒有類型,所有變量都由字符串組成,調用時前面加$,如:
      #!/bin/sh
      #set variable a
      a="hello word"
      # print a
      echo "A is:"
      echo $a


4)有時候變量名容易與其他文字混淆,如:
      num=2
      echo "this is the $numnd"
   結果將只會輸出: this is the ,因爲shell會去搜索變量numnd的值,這個變
   量是沒有定義值得。可使用花括號解決上述問題:
      num=2
      echo "this is the ${num}nd"
   結果會輸出: this is the 2nd


5)默認變量:
    $# :傳入腳本的命令行參數個數
    $* :所有命令行參數值,在各個參數之間留有空格
    $0 :命令本身(shell文件名)
    $1 :第一個命令行參數
    $2 :第二個命令行參數
   如:腳本文件名爲 example,內容如下:
#!/bin/sh
echo "number of vars:"$#
echo "values of vars:"$*
echo "value of cmd:"$0
echo "value of var1:"$1
echo "value of var2:"$2
echo "value of var3:"$3
   運行  ./example 1 2 3  (表示執行example腳本並傳入1,2,3三個參數)
   輸出:   number of vars:3
                   values of vars:1 2 3
                   value of cmd:./example 1 2 3
                   value of var1:1
                   value of var2:2
                   value of var3:3
 

   運行   sh example 1 2 3
   輸出:   number of vars:3
                   values of vars:1 2 3
                   value of cmd:example 1 2 3
                   value of var1:1
                  value of var2:2
                  value of var3:3
   注意:兩種運行方式中$0的區別。


6)變量首次被賦值是加上local關鍵字可以聲明一個局部變量。如:
#!/bin/sh
hello="var1"
echo $hello
function func1 {
   local hello="var2"
   echo $hello
}
func1
echo $hello
   注意:“function func1 {”中func1和“{”之間必須要加個空格,否則會報
   錯。
   輸出:  var1
                 var2
                 var1


7)變量注意事項:
    變量賦值是,“=”左右不能有空格;
    BASH中的語句結尾不需要分號。


8)if語句格式:
     第一種:    if [ expression ]
                 then
                     #code block
                 fi
      
     第二種:    if [ expression ]
                 then
                     #code block
                 else
                     #code block
                 fi


      第三種:   if [ expression ]
                 then
                     #code block
                 else if [ expression ]
                      then
                          #code block
                      else
                          #code block
                      fi
                 fi
    注意:“[”和“]”左右兩邊必須要留有有空格或回車。


9)if常用的比較操作符:
    比較操作          整數操作           字符串操作
      相同                  -eq                           =
      不同                   -ne                          !=
      大於                  -gt                            >
      小於                  -lt                             <
      大於等於          -ge
      小於等於          -le
      爲空                                                 -z
      不爲空                                             -n
    例:
      比較整數a和b是否相等: if [ $a = $b ]   #也可用-eq
      判斷整數a是否大於整數b: if [ $a -gt $b ]
      比較字符串a和字符串b是否相等: if [ $a = $b ]
      判斷字符串a是否爲空: if [ -z $a ]
    注意:操作符(包括“=”,這裏不是賦值符)左右都有空格。 


10)文件判斷符:
-e  文件已經存在
-f  文件是普通文件
-s  文件大小不爲零
-d  文件是一個目錄
-r  文件對當前用戶可以讀取
-w  文件對當前用戶可以寫入
-x  文件對當前用戶可以執行
    如:   #!/bin/sh
           folder=/home
           [ -r "$folder" ] && echo "Can read $folder"
           [ -f "$folder" ] || echo "this is not file"
    注意:“&&”表示前面判斷爲真時才執行後面語句;“||”表示前面判斷爲
    假時才執行後面的判斷;變量內部不存在空格時,加不加雙引號都一樣,即
    folder=/home和folder="/home"效果一樣


11)for循環基本結構:
        for var in [list]
        do
            #code block
        done
    其中&var(var是變量名)是循環控制變量,[list]是var需要遍歷的一個集合,do/done對包含了循環體,

    相當於C語言中的一對大括號。另外如果do和 for被寫在同一行,必須在do前面加上“;”。如: for var in [list];do
    (注意:“;”左右空格可有可無,不影響)。
    例如:   #!/bin/sh
             for day in Sun Mon Tue Wed Thu Fri Sat
             do
                  echo $day
             done
    輸出: Sun
                  Mon
                  Tue
                  Wed
                  Tue
                  Fri
                  Sat
    注意,如果列表被包含在一對雙引號中,則表示一個元素,如:
             #!/bin/sh
             for day in "Sun Mon Tue Wed Thu Fri Sat"
             do
                  echo $day
             done
    則輸出:   Sun Mon Tue Wed Thu Fri Sat
    注意:for循環所在行變量day是不加“$”的(相當於給變量賦值階段),而
    在循環體內,變量$day是必須加上“$”符號的(相當於調用階段)。  


12)while循環基本結構:
       while [ condition ]
       do
           #code block
       done
    
    until循環基本結構:
       until [ condition ]
       do
           #code block
       done
    注意:while和until的區別在於while是爲真時執行,until是爲假是執行。


13)case語句格式:
       case "$var" in
          condition1)
             ;;
          condition2)
             ;;
          *)
          default statments;;
        esac
    例:     #!/bin/sh
                 echo "Press your keyboard, then the data return."
                 read Keypress
                 case "$Keypress" in
                 [A-Z]) echo "Uppercase letter";;
                 [a-z]) echo "Lowercase letter";;
                 [0-9]) echo "Digit";;
                 *) echo "Puncturation, whitespace, or other";;
             esac
    注意:read是shell腳本語言提供的一個函數,其功能是“等待,直到你在
    盤輸入一個字符,然後賦值給後面的變量”。 


-------------------------------------------------------------------------------------------------------------------

變量內容有空格時必須要加雙引號(" ")或單引號(' '),但這兩者是有區別的:

雙引號內的特殊字符如$等,可以保持原有特性,如:

       var="lang is $LANG"  則  echo $var  可得  lang is en_US

單引號內的特殊字符僅爲一般字符,如:

      var='lang is $LANG'  則  echo $var  可得  lang is $LANG

發佈了31 篇原創文章 · 獲贊 10 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章