使用者自定義變量
位置變量,即指令行參數
預定義變量
環境變量


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"


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


#!/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,如需轉載請自行聯系原作者