1. 程式人生 > >Linux入門學習筆記(五)--Shell指令碼編寫

Linux入門學習筆記(五)--Shell指令碼編寫

Shell指令碼的HelloWorld:     cd /自己的路徑下     vi helloworld.sh 進入之後,預設是命令狀態,按i進入編輯模式     內容:         #! /bin/bash         echo "Hello World!"     按ESC,輸入:wq回車     chmod +x helloworld.sh     ./helloworld.sh     在命令視窗輸出了:Hello World!

shell的知識點小記:     描述的有點兒不容易懂,看了好久才勉強明白 # ## % %%。     #、## 表示從左邊開始刪除。一個 # 表示從左邊刪除到第一個指定的字元;兩個 # 表示從左邊刪除到最後一個指定的字元。     %、%% 表示從右邊開始刪除。一個 % 表示從右邊刪除到第一個指定的字元;兩個 % 表示從左邊刪除到最後一個指定的字元。     刪除包括了指定的字元本身。

shell陣列操作小記:     看陣列的時候,覺得遍歷陣列用的比較多,所以自己試著寫了寫遍歷,同時試了一下在SHELL指令碼中的變數自增幾個寫法,在就新手學習的時候注意一下 [ 和 $ 之間要有空格,沒有空格執行會報錯,新手可能不太注意這一點,我開始就沒注意到~~~~     示例如下:         #!/bin/bash         my_arry=(a b "c","d" abc)         echo "-------FOR迴圈遍歷輸出陣列--------"         for i in ${my_arry[@]};         do           echo $i         done

        echo "-------::::WHILE迴圈輸出 使用 let i++ 自增:::::---------"         j=0         while [ $j -lt ${#my_arry[@]} ]         do           echo ${my_arry[$j]}           let j++         done

        echo "--------:::WHILE迴圈輸出 使用 let  "n++ "自增: 多了雙引號,其實不用也可以:::---------"         n=0         while [ $n -lt ${#my_arry[@]} ]         do           echo ${my_arry[$n]}           let "n++"         done

        echo "---------::::WHILE迴圈輸出 使用 let m+=1 自增,這種寫法其他程式設計中也常用::::----------"         m=0         while [ $m -lt ${#my_arry[@]} ]         do           echo ${my_arry[$m]}           let m+=1         done

        echo "-------::WHILE迴圈輸出 使用 a=$[$a+1] 自增,個人覺得這種寫法比較麻煩::::----------"         a=0         while [ $a -lt ${#my_arry[@]} ]         do          echo ${my_arry[$a]}          a=$[$a+1]         done          shell運算子注意事項:     ①.使用 [[ ... ]] 條件判斷結構,而不是 [ ... ],能夠防止指令碼中的許多邏輯錯誤。比如,&&、||、< 和 > 操作符能夠正常存在於 [[ ]] 條件判斷結構中,但是如果出現在 [ ] 結構中的話,會報錯。     ②.字串比較是否為 null 這裡:         #!/bin/bash         a=""         if [ -n $a ]         then            echo "-n $a : 字串長度不為 0"         else            echo "-n $a : 字串長度為 0"         fi

        輸出結果為:

        -n  : 字串長度不為 0

        從結果上看 -n $a 返回 true,這並正確,正確的做法是 $a 這裡應該加上雙引號,否則 -n $a 的結果永遠是 true:

        #!/bin/bash         a=""         if [ -n "$a" ]         then            echo "-n $a : 字串長度不為 0"         else            echo "-n $a : 字串長度為 0"         fi

        輸出結果為:         -n  : 字串長度為 0     ③.推薦用 $() 代替 ``:         val=`expr 10 + 20`         val=$(expr 10 + 20)          shell printf命令:     printf "%-10s %-8s %-4s\n" 姓名 性別 體重kg       printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234     解釋: %-10s 指一個寬度為10個字元(-表示左對齊,沒有則表示右對齊),任何字元都會被顯示在10個字元寬的字元內,如果不足則自動以空格填充,超過也會將內容全部顯示出來。%-4.2f 指格式化為小數,其中.2指保留2位小數。          ①.如果沒有 arguments,那麼 %s 用NULL代替,%d 用 0 代替,printf "%s and %d \n" ,輸出: and 0     ②.格式只指定了一個引數,但多出的引數仍然會按照該格式輸出,format-string 被重用      shell test命令:     -eq 等於為真        -ne 不等於為真        -gt 大於為真             -ge 大於等於為真    -lt 小於為真        -le 小於等於為真     例:         num1=100         num2=100         if test $[num1] -eq $[num2]         then             echo '兩個數相等!'         else             echo '兩個數不相等!'         fi

shell 傳參示例:     #! /bin/bash     read -p "請輸入變數a的值:" a     read -p "請輸入變數b的值:" b     result=$[a+b]     echo '相加結果為:'$result     示例二:     #! /bin/bash     echo "Shell 傳遞引數!"     echo "執行的檔名為:$0"     echo "傳入的第一個引數為$1"     echo "傳入的第二個引數為$2"     echo "傳入的第三個引數為$3"     read -p "按任意鍵退出..."

shell 檔案測試:☆     引數     說明     -e 檔名     如果檔案存在則為真     -r 檔名     如果檔案存在且可讀則為真     -w 檔名     如果檔案存在且可寫則為真     -x 檔名     如果檔案存在且可執行則為真     -s 檔名     如果檔案存在且至少有一個字元則為真     -d 檔名     如果檔案存在且為目錄則為真     -f 檔名     如果檔案存在且為普通檔案則為真     -c 檔名     如果檔案存在且為字元型特殊檔案則為真     -b 檔名     如果檔案存在且為塊特殊檔案則為真     例項演示:         cd /bin         if test -e ./bash         then             echo '檔案已存在!'         else             echo '檔案不存在!'         fi     另外,Shell還提供了與( -a )、或( -o )、非( ! )三個邏輯操作符用於將測試條件連線起來,其優先順序為:"!"最高,"-a"次之,"-o"最低。例如:         cd /bin         if test -e ./notFile -o -e ./bash         then             echo '至少有一個檔案存在!'         else             echo '兩個檔案都不存在'         fi          linux shell 檔案包含     Shell 也可以包含外部指令碼。這樣可以很方便的封裝一些公用的程式碼作為一個獨立的檔案。     Shell 檔案包含的語法格式如下:     . filename   # 注意點號(.)和檔名中間有一空格     或     source filename     示例:     test1.sh         #! /bin/bash         url=www.baidu.com     test2.sh         #! /bin/bash         . ./test1.sh         echo "百度網址:${url}"     ./test2.sh 輸出: 百度網址:www.baidu.com