shell腳本的編寫:
1、bash的算術運算:bash不支援浮點型,取圓整(丢失小數點後的數值)
使bash執行算術運算必須按照以下格式書寫:1、let 算術表達式 2、$[算術表達式] 3、$((算術表達式))
若變量一次步進幅度為1則可以寫作:SUM++ | ++SUM ,SUM-- | --SUM
2、bash中的語句邏輯運算:
&&與運算 語句1&&語句2 語句1假便不在執行語句2
||或運算 語句1||語句2 語句1真便不在執行語句2
!非運算 !語句
在bash中邏輯與,與邏輯或稱作短路操作符,既是隻計算前面的語句
3、bash中的條件測試:
測試的表達式:
[ condition ] 作為指令
` condition ` shell中的關鍵字
test condition
(1)、整數測試:
-eq:等于 -gt:大于 -ge:大于等于 -lt:小于 -le:小于等于 -ne:不等于
例如: #test $A -eq $B
#A=40
#B=60
# [ $A -ge $B ] && echo "$A is the max number" || echo "$B is the max number"
(2)、字元串測試:
==:内容一樣,做測試條件 !=:内容不一樣 -z:是否為空,空為真,非空為假 -n:是否不為空,空為假,非空為真
例如:#[ -z "$A" ] && echo "A is null." || echo "A is not null!"
#[ "$A" = "$B" ] && echo "Yiyang" || echo "Not yiyang!"
(3)、檔案測試
-e FILE 檔案是否存在,存在為真,不存在為假
-f FILE 是否為普通檔案
-d FILE 是否為目錄
-h/-L FILE 是否為軟連接配接
-b FILE 是否為塊裝置
-c FILE 是否為字元裝置
-r FILE 目前使用者對檔案是否有讀權限
-w FILE 寫權限
-x FILE 執行權限
例如:#[ -e /tmp/scripts ] && [ -d /tmp/scripts ] && mkdir /tmp/scripts
4、sed:stream editor行編輯器:非互動式編輯器,沒有破壞性,sed的工作模式是将檔案的原内容拷貝到自己的模式空間中,對複制出的這份内容進行操作,并非對原内容進行操作,是以沒有破壞性。
格式:sed "搜尋内容command" inputfile,非互動式,将處理後的資料顯示在螢幕上
搜尋範圍:/PATTERN/command #sed '/\<de.\{5\}\>/,/\<in\>/d' even.sh
/PATTERN1,/PATTERN2command 第一次符合PATTERN1到第一次符合PATTERN2的行
參數:d 删除行(例如:#sed‘5d’ even.sh)
p 顯示比對到的内容所在的行
-n 隻顯示被模式比對到的内容
a\ 在比對到内容的行下面添加一行或多行 #sed '3,5a\This is a new line' even.sh
i\ 在其行上面添加一行或多行 \nThis is second line
! 對比對條件取反
* s sed 'ADDR1,ADDR2s@from@to@g'
-e sed -e '' -e '' -e '' inputfile 連接配接多個處理機制(例如:
sed -e '1,$s@ /.*/ \(/\)\{1\} @ \1 -e '/d' )
-i 直接修改原檔案
-f 從另外的檔案讀取sed的處理機制并且對檔案進行執行
5、for語句,其循環方式是周遊循環
格式:for 變量 in 清單;do
語句1;
語句2;
……
done
而在for循環中定義循環清單可以分為:簡單列出、{1..20}(從1到20)、`seq 1 2 10`(從1開始每次加2循環到10)
如:計算100所有能被3整除的數的和
<a target="_blank" href="http://blog.51cto.com/attachment/201202/214755423.jpg"></a>
如:計算100以内所有偶數的和
<a target="_blank" href="http://blog.51cto.com/attachment/201202/214835694.jpg"></a>
6、while語句,其循環方式為隻要條件滿足就一直循環下去,否則将跳出循環
格式:while 條件;do
語句1
語句2
如:提醒使用者輸入一個使用者名,如果使用者輸入的為空,則一直提醒其輸入。
<a target="_blank" href="http://blog.51cto.com/attachment/201202/215242415.jpg"></a>
7、until語句,其循環方式和while正好相反,隻要條件不滿足則循環下去,否則将跳出循環
格式:until 條件;do
8、if語句:分為單分支、雙分支、多分支
單分支:if 測試條件;then
語句
……
fi
如:建立目錄/tmp/maintenance,如果存在就删除後在建立。
<a target="_blank" href="http://blog.51cto.com/attachment/201202/214913300.jpg"></a>
雙分支:if 測試條件;then
else
多分支:if 測試語句1;then
elif 測試語句2;then
elif 測試語句3;then
如:檢查/var/log下的所有檔案,如果是普通檔案就輸出為普通檔案,如果是目錄就輸出是目錄,其他的則輸出unknow。
<a target="_blank" href="http://blog.51cto.com/attachment/201202/215001827.jpg"></a>
當腳本書寫完成之後:1、使用bash -n SCRIPTFILE檢查腳本檔案是否含有錯誤。2、使用bash SCRIPTFILE執行腳本檔案,或者給腳本檔案加上執行權限,直接對腳本檔案進行執行!
本文轉自 向陽草米奇 51CTO部落格,原文連結:http://blog.51cto.com/grass51/776753,如需轉載請自行聯系原作者