#!/bin/bash
用來告訴系統使用/bin/bash 程序來執行該腳本。譬如python 腳本,可以這樣寫:
#!/usr/bin/python
賦值公式:
變量名=值
取一個變量的值的時候,需要在變量名前面加上$ 符號,譬如:
var="hello bash" echo $var
如果出現拼接,而且又沒有空格為分隔符,這個時候就需要使用大括號將變量括住,如:
num=3 echo "this is the ${num}th"
其輸出結果為:this is the 3th
shell默認下是進行字符串操作的。所以如果要計算的話就不能這么使用了
var=1 var=$var+1 echo $var
其輸出結果為:1+1
對於數值計算的話有下面的方法
var=1 let "var+=1" # let表示數學運算 var="$[$var+1]" # $[]表示對括號內的表達式進行數學運算,與(())感覺概念是一樣的 ((var++)) var=$(($var+1)) var="$(expr "$var" + 1)" # expr表示整數運算 var="`expr "$var" + 1`"
if語句
if ...; then ... elif ...; then ... else ... fi
一些常見的判斷
[ -f "file_path" ] # 判斷文件是否存在 [ -x "file_path" ] # 判斷文件是否具有可執行權限 [ -n "$var" ] # 判斷$var變量是否存在 [ "$var1" = "$var2" ] # 判斷$var1和$var2是否相等
[]用來表示條件測試。注意空格,括號前后都需要空格。
&&和||
跟其它大部分語言一樣,&&和||的意思都是差不多的。
&&:如果第一個條件為ture則檢查第二個條件/執行第二條語句;
||:如果第一個條件為false則檢查第二個條件/執行第二條語句;
所以就可以這么用了:
[ -r "${file_path}" ] || { echo "Cannot read ${file_path}";exit 1; }
意思是,如果文件不可讀,則打印錯誤信息,並退出。
case語句
case是一個用來匹配字符串的表達式,不是數字哦。
case表達式
case ... in ...) ...;; esac
例子
#!/bin/bash case "$1" in "1") echo 1;; "2") echo "two";; *) echo "your input is $1";; esac
循環
while表達式
while ...; do ... done
for表達式
for var in ...; do ... done
這兩個表達式都比較簡單,沒啥需要特別說明的。我發現不同的系統之間有些差異。我發現紅帽是可以使用下面的表達式的,但是Debian卻不可以。不知道是系統版本引起還是系統本身存在差異的緣故,我沒有深究這個。
for ((i=0;i++;i<10)); do ... done
function_name(){ #body of function }
函數無論對於任何語言來說都是需要最基本掌握的。Shell的函數只需要在調用之前定義就好了。跟C語言一樣,但不需要聲明,跟C語言還是有區別的。
Shell函數定義的時候不用寫形參。調用的時候按照空格隔開多個參數傳入就可以了。然后使用$1、$2、$3...這些參數來調用。
下面是一個簡單的遞歸調用例子:
#!/bin/bash recursion(){ echo $1; if [ "$1" -eq "0" ]; then echo "done" else recursion $(($1-1)) fi } echo "start"; recursion 5;