天天看點

shell程式設計學習筆記【原創】本文為本人學習筆記,如有轉載請注明出處,謝謝一、Bourne Shell 有如下四種變量:二、位置變量三、環境變量四、read用法五、shell程式設計代碼剖析六、test語句的使用七、shell控制語句八、shell程式設計調試技巧

使用者自定義變量

位置變量,即指令行參數

預定義變量

環境變量

shell程式設計學習筆記【原創】本文為本人學習筆記,如有轉載請注明出處,謝謝一、Bourne Shell 有如下四種變量:二、位置變量三、環境變量四、read用法五、shell程式設計代碼剖析六、test語句的使用七、shell控制語句八、shell程式設計調試技巧
shell程式設計學習筆記【原創】本文為本人學習筆記,如有轉載請注明出處,謝謝一、Bourne Shell 有如下四種變量:二、位置變量三、環境變量四、read用法五、shell程式設計代碼剖析六、test語句的使用七、shell控制語句八、shell程式設計調試技巧

ts.sh

#!/bin/sh

echo  “PATH=$PATH”

./ts.sh

HOME :   /etc/passwd檔案中列出的使用者主目錄

IFS:   Internal Field  Separator,預設為空格,tab及換行符

PATH: shell 搜尋路徑

PS1, PS2:  預設提示符($)及換行提示符( > )

TERM:  終端類型,常用的有vt100, ansi, vt200, xterm等

read 從标準輸入讀入一行,并指派給後面的變量,其文法為:

read var

把讀入的資料全部指派給var

read  var1  var2  var3

把讀入行中的第一個單詞(word)賦給var1, 第二個單詞賦給var2, ……把其餘所有的詞賦給最後一個變量

如果執行read語句時标準輸入無資料,則程式在此停留等候,知道資料的到來或被終止運作

 read val val2 val3                                                                                          

 echo "val=$val"

 echo "val2=$val2"

 echo "val3=$val3"

shell程式設計學習筆記【原創】本文為本人學習筆記,如有轉載請注明出處,謝謝一、Bourne Shell 有如下四種變量:二、位置變量三、環境變量四、read用法五、shell程式設計代碼剖析六、test語句的使用七、shell控制語句八、shell程式設計調試技巧
shell程式設計學習筆記【原創】本文為本人學習筆記,如有轉載請注明出處,謝謝一、Bourne Shell 有如下四種變量:二、位置變量三、環境變量四、read用法五、shell程式設計代碼剖析六、test語句的使用七、shell控制語句八、shell程式設計調試技巧

test語句可測試三種對象:

       字元串  整數  檔案

每種測試對象都有若幹測試操作符

例如:

       test  “$answer”= “yes”

       變量answer的值是否為字元串yes

       test  $num  -eq  18

       變量num的值是否為整數18

       test  –d tmp

       測試tmp是否為一個目錄名

字元串測試

s1 = s2  測試兩個字元串的内容是否完全一樣

s1 != s2  測試兩個字元串的内容是否有差異

-z s1     測試s1字元串的長度是否為0

-n s1     測試s1字元串的長度是否不為0

整數測試

a –eq b  測試a與b是否相等

a –ne b  測試a與b是否不相等

a –gt b  測試a是否大于b

a –ge b  測試a是否大于等于b

a –lt b   測試a是否小于b

a –le b   測試a是否小于等于b

檔案測試

-d name 測試name是否為一個目錄

-f name 測試name是否為普通檔案

-L name  測試name是否為符号連結

-r  name  測試name檔案是否存在且為可讀

-w  name   測試name檔案是否存在且為可寫

-x  name  測試name檔案是否存在且為可執行

-s  name   測試name檔案是否存在且其長度不為0

f1 –nt f2   測試檔案f1是否比檔案f2更新

f1 –ot f2  測試檔案f1是否比檔案f2更舊

1)if…then…fi

文法結構:

         if  表達式

                            then 指令表

         fi

如果表達式為真,則執行指令表中的指令;否則退出if語句執行fi後面的語句

if和fi是條件語句的語句括号,必須成對使用;

指令表中的指令可以是一條,也可以是若幹條

2)case…esac

多路分支語句case用于多重條件測試,文法為:

case 字元串變量 in

         模式1)

                            指令表1

                            ;;

         模式2)

                            指令表2

         ……

         模式n)

                            指令表n

esac

注意:

case語句隻能檢測字元串變量

各模式中可用檔案名元字元,以有括号結束

指令表以單獨的雙分号行結束,退出case語句

模式n常寫為字元* 表示所有其它模式

最後一個雙分号行可以省略

3)for…do…done

當循環次數已知或确定時,使用for循環語句來多次執行一條或一組指令。循環體由語句括号do和done來限定。格式為:

for 變量名  in  單詞表

         do

                   指令表

         Done

變量依次取單詞表中的各個單詞,每取一次單詞,就執行一次循環體中的指令。循環次數由單詞表中的單詞數确定。指令表中的指令可以是一條,也可以是由分号或換行符分開的多條。

如果單詞表是指令行上的所有位置參數時,可以在for語句中省略“in 單詞表”部分。

4)while…do…done

文法結構為:

while  指令或表達式

do

         指令表

done

while語句首先測試其後的指令或表達式的值,如果為真,就執行一次循環體中的指令,然後再測試該指令或表達式的值,執行循環體,直到該指令或表達式為假時退出循環。

while語句的退出狀态為指令表中被執行行的最後一條指令的推出狀态

5)until…do…done

until 指令或表達式

until循環與while循環的功能相似,所不同的是隻有當測試的指令或表達式的值是假時,才執行循環體中的指令表,否則退出循環

6)break和continue

break  n 則表示跳出n層;

continue語句則馬上轉到最近一層循環語句的下一輪循環上,

continue  n則轉到最近n層循環語句的下一輪循環上

1)跟蹤腳本執行結果

在開始調試的地方加入:set –x

在結束調試的地方加入:set +x

shell程式設計學習筆記【原創】本文為本人學習筆記,如有轉載請注明出處,謝謝一、Bourne Shell 有如下四種變量:二、位置變量三、環境變量四、read用法五、shell程式設計代碼剖析六、test語句的使用七、shell控制語句八、shell程式設計調試技巧
shell程式設計學習筆記【原創】本文為本人學習筆記,如有轉載請注明出處,謝謝一、Bourne Shell 有如下四種變量:二、位置變量三、環境變量四、read用法五、shell程式設計代碼剖析六、test語句的使用七、shell控制語句八、shell程式設計調試技巧

  #!/bin/sh                                                                                                                              

 echo "zbh"

 #if [ $1 = "1" ]; then

     cd .. && pwd 

 #fi

     echo "zbh ******* end"

執行此檔案時,要使用source,否則腳本會在子程序中執行,進而目前控制台的路徑不會改變。

歡迎交流,下面是我的聯系方式:

qq:920052390

部落格園:http://www.cnblogs.com/sky-heaven/

知乎:http://www.zhihu.com/people/zhang-bing-hua

本文轉自張昺華-sky部落格園部落格,原文連結:http://www.cnblogs.com/sky-heaven/p/5569825.html,如需轉載請自行聯系原作者

繼續閱讀