腳本語句介紹和練習題一
阿新 • • 發佈:2018-03-24
語句 for 循環 一、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命令等等還未提及,此篇有基礎的就不用看了,我這個渣渣菜鳥尚未搞定它們,待我後續更新!
腳本語句介紹和練習題一