一、if、case語句篇
PS:腳本現在是本人的弱項,此篇主要寫一下做過的一點腳本題,都是一些基礎難度不是很大的題,現在寫出來也算是回顧一下吧,以後有更實用更專業的腳本可能會繼續更新。
1.條件選擇if語句
選擇執行:
注意:if語句可嵌套
單分支
if 判斷條件;then
條件爲真的分支代碼
fi
雙分支
if 判斷條件; then
條件爲真的分支代碼
else
條件爲假的分支代碼
fi
多分支
if 判斷條件1; then
條件爲真的分支代碼
elif 判斷條件2; then
條件爲真的分支代碼
elif 判斷條件3; then
條件爲真的分支代碼
else
以上條件都爲假的分支代碼
fi
逐條件進行判斷,第一次遇爲“真”條件時,執行其分支, 而後結束整個if語句
2.if示例
這個例子是用腳本計算從1開始相加到一個正整數的和
[root@6 ~/bin]#cat ./jisuan.sh
#!/bin/bash
#Filename:jisuan.sh
#date 2018-03-17
#Author:宛若天堂
#--------------------------
read -p " 請輸入正整數的值: " ab
if [[ "$ab" =~ ^[0-9]+$ ]];then
jieguo=` seq -s+ 1 $ab |bc `
echo "從1開始計算到您輸入的值的和爲:$jieguo"
else
echo "請輸入正確的數字"
fi
[root@6 ~/bin]#./jisuan.sh
請輸入正整數的值: 100
從1開始計算到您輸入的值的和爲:5050
[root@6 ~/bin]#seq -s+ 1 100 |bc
5050
if語句後面的“ $ab =~ ^[0-9]+$ ” 是用來判斷輸入的內容是否爲正整數。
再來一個比大小的腳本,$# -ne 2 意思是說給腳本的參數不是兩個就立刻退出。
測試結果
PS:這個腳本有一點BUG,就是還未判斷其它字符比如輸入aa bb 應該也有個退出狀態(待斷劍重鑄之日,騎士歸來之時)
3、條件判斷case語句
case 變量引用 in case支持glob風格的通配符
case var in var變量
patten 1) 匹配模式1 a|b|c |或的意思
command... 需要執行的命令
;; 命令執行完畢
patten 2)
command...
;;
*) 默認值,沒有匹配的模式
command...
;;
esac 代表case語句的結束
4、case例題
[root@6 /app/lianxi]#cat yuema.sh
#!/bin/bash
read -p "今晚約嗎:" yu
case $yu in
[Yy][eE][sS])
echo "那好吧"
;;
[Nn][oO])
echo "傷心了"
;;
*)
echo "請你圓潤的離開我的視線"
esac
這裏解釋一下,回答"yes"和“no”時會有多種大小寫的可能出現,這樣寫無論大小寫的回答都能匹配到關鍵字,而最後的*)是指沒匹配到的就回答echo後面的語句啦
二、for循環語句
1、for循環
for 變量名 in 列表;do
循環體
done
執行機制:
依次將列表中的元素賦值給“變量名”; 每次賦值後即執 行一次循環體; 直到列表中的元素耗盡,循環結束
列表生成方式:
(1) 直接給出列表
(2) 整數列表:
(a) {start..end}
(b) $(seq [start [step]] end)
(3) 返回列表的命令
$(COMMAND)
(4) 使用glob,如:*.sh
(變量引用);
$@, $*
先來個很簡單的例子,也是大家見到最多的一種
從1開始每次相加1,直到循環到10爲止。
再來一個ping網段的腳本,先查看一下IP地址
可以看到(虛擬級)僅主機的IP是192.168.80網段的,爲省時間腳本里我只寫了和僅主機範圍左右的了
[root@6 /app/lianxi]#cat wangduan.sh
#!/bin/bash
#需要ping別的網段就改net後面的變量就行了
net=192.168.80
up=0
down=0
for i in {120..130}
do
if ping -c1 -w1 $net.$i &> /dev/null ;then
echo $net.$i UP ;
let up++ ;
else
echo $net.$i down;
let down++ ;
fi
done
echo "up的一共有$up"
echo "down的一共有$down"
unset net
#{ } 不開子進程 小括號( ) 會開子進程
ps:let ++ up 是指每次$i循環以後的結果(Up)每次加1,down同理
三、總結
此篇中的幾個例題難度都不是很大,而且還有while循環 、until循環循環、控制語句continue、循環控制語句break、循環控制shift命令等等還未提及,此篇有基礎的就不用看了,我這個渣渣菜鳥尚未搞定它們,待我後續更新!