1. 程式人生 > >腳本語句介紹和練習題一

腳本語句介紹和練習題一

語句 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命令等等還未提及,此篇有基礎的就不用看了,我這個渣渣菜鳥尚未搞定它們,待我後續更新!

腳本語句介紹和練習題一