shell程式設計基本文法
- 1.注釋
- 2.字元串
- 3.數組
- 4.運算符(算術,關系,布爾,字元串,檔案測試)
-
- 1). 算術運算符
- 2). 字元串運算符
- 3). 整數值比較
- 4). 布爾運算符(與或非)
- 5). 邏輯運算符
- 6). 檔案測試運算符
- 5.流程控制語句
-
- 1). if-else結構
- 2). for循環
- 3). while循環
1.注釋
單行注釋 #
多行注釋 :<<EOF
注釋内容
注釋内容
注釋内容
EOF
2.字元串
echo ${#String} 統計字元串長度并顯示
echo ${String:n:m} 從n位(第一位為0位)開始截取長度為m的字元串并顯示
echo `expr index "$String" 查找字元串中字元s的位置(從1開始)并顯示
3.數組
array=("Jason" "Jensen" "Tim") 定義數組
echo ${array[i]} 輸出數組i位
echo ${array[@]}或echo ${array[*]} 依次輸出數組所有元素
echo ${#array[@]}或echo ${#array[*]} 統計數組長度并顯示
4.運算符(算術,關系,布爾,字元串,檔案測試)
1). 算術運算符
+, -, \*, /, %(乘法需使用轉義字元)
c=`expr $a \* $b` 乘法運算
2). 字元串運算符
: 字元串内容相同則為真,注意在=前後各有一個空格,如果沒有空格就是指派的關系
!=: 字元串内容不同,則為真
-z: 字元串内容為空(長度為零)則為真
-n: 字元串内容非空(長度非零)則為真
<: string1 < string2 如果string1在本地的字典序列中排在string2之前,則為真
>: string2 如果string1在本地的字典序列中排在string2之後,則為真
3). 整數值比較
eq: 等于(equal)
-ne: 不等于(not equal)
-gt: 大于(Greater than)
-lt: 小于(lesser than)
-le: 小于等于(lesser or equal)
-ge: 大于等于(Greater or equal)
4). 布爾運算符(與或非)
a : 與運算,-a與[]一起用
-o : 或運算,-o與[]一起用
! : 非運算,當制定條件不成立時,傳回結果為真
5). 邏輯運算符
&&: 邏輯與 &&與[[]]一起用
||: 邏輯或 ||與[[]]一起用
6). 檔案測試運算符
b file 檢測檔案是否是塊裝置檔案,如果是,則傳回 true。
-c file 檢測檔案是否是字元裝置檔案,如果是,則傳回 true。
-d file 檢測檔案是否是目錄,如果是,則傳回 true。
-f file 檢測檔案是否是普通檔案(既不是目錄,也不是裝置檔案),如果是,則傳回 true。
-r file 檢測檔案是否可讀,如果是,則傳回 true。
-w file 檢測檔案是否可寫,如果是,則傳回 true。
-x file 檢測檔案是否可執行,如果是,則傳回 true。
-s file 檢測檔案是否為空(檔案大小是否大于0),不為空傳回 true。
-e file 檢測檔案(包括目錄)是否存在,如果是,則傳回 true。
-nt:file1 -nt file2 如果 file1 比 file2 新(修改時間),則為true
-ot:file1 -ot file2 如果 file1 比 file2 舊(修改時間),則為true
5.流程控制語句
1). if-else結構
if [ 條件測試語句1 ] ;
then 指令1
elif [ 條件測試語句1 ] ;
then 指令1
elif ...
else
指令n
fi
2). for循環
for var in 1 2 3 4
do
echo $var
done
for j in $(seq 1 5) #seq産生循環次數
for循環總是接收in語句之後的某種類型的字清單。
字清單也可以引用磁盤上的檔案,甚至檔案通配符。
#對目錄中的檔案做循環
for x in /var/log/*
do
echo "$x is a file living in /var/log"
echo $(basename $x) is a file living in /var/log #basename用于擷取基本檔案名,否則$x擷取絕對路徑
done
3). while循環
while 指令表達式
do
指令清單
done