標籤:style blog color io 使用 ar strong for 檔案
聲明執行程式
#!/bin/bash
用來告訴系統使用/bin/bash 程式來執行該指令碼。譬如python 指令碼,可以這樣寫:
#!/usr/bin/python
賦值和引用
賦值公式:
變數名=值
取一個變數的值的時候,需要在變數名前面加上$ 符號,譬如:
var="hello bash"echo $var
如果出現拼接,而且又沒有空格為分隔字元,這個時候就需要使用大括弧將變數括住,如:
num=3echo "this is the ${num}th"
其輸出結果為:this is the 3th
shell預設下是進行字串操作的。所以如果要計算的話就不能這麼使用了
var=1var=$var+1echo $var
其輸出結果為:1+1
對於數值計算的話有下面的方法
var=1let "var+=1" # let表示數學運算var="$[$var+1]" # $[]表示對括弧內的運算式進行數學運算,與(())感覺概念是一樣的((var++))var=$(($var+1))var="$(expr "$var" + 1)" # expr表示整數運算var="`expr "$var" + 1`"
嫌太亂的話,建議記住(($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/bashcase "$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
shell函數
function_name(){ #body of function}
函數無論對於任何語言來說都是需要最基本掌握的。Shell的函數只需要在調用之前定義就好了。跟C語言一樣,但不需要聲明,跟C語言還是有區別的。
Shell函數定義的時候不用寫形參。調用的時候按照空格隔開多個參數傳入就可以了。然後使用$1、$2、$3...這些參數來調用。
下面是一個簡單的遞迴調用例子:
#!/bin/bashrecursion(){ echo $1; if [ "$1" -eq "0" ]; then echo "done" else recursion $(($1-1)) fi}echo "start";recursion 5;
上面雖然是一個很簡單的例子,但是闡述了函數如何調用,如何傳參。
[Linux]shell編程基礎/linux基礎入門