流程控制
v 一 、過程式編程語言:
1.順序執行
2.選擇執行
3.循環執行
條件選擇if 語句
選擇執行:
注意: :if 語句可 嵌套
單分支
if 判斷條件;then
條件為真的分支代碼
fi
雙分支
if 判斷條件; then
條件為真的分支代碼
else
條件為假的分支代碼
fi
多分支
if CONDITION1 ; then
if-true
elif CONDITION2 ; then
if-ture
elif CONDITION3 ; then
if-ture
…
else
all-false
fi
逐條件進行判斷,第一次遇為“真”條件時,執行其分支,
而后 結束整個if 語句
if 實例
根據命令的退出狀態來執行命令
if ping -c1 -W2 station1 &> /dev/null; then
echo 'Station1 is UP'
elif grep "station1" ~/maintenance.txt &> /dev/null
then
echo 'Station1 is undergoing maintenance‘
else
echo 'Station1 is unexpectedly DOWN!'
exit 1
fi
條件判斷:case
case 用 變量引用 in
PAT1)
分支1
;;
PAT2)
分支2
;;
…
*)
默認分支
;;
esac
case 支持glob 風格的通配符:
*: 任意長度任意字符
?: 任意單個字符
[] :指定范圍內的任意單個字符
循環
循環執行
將某代碼段重復運行多次
重復運行多少次:
循環次數事先已知
循環次數事先未知
有進入條件和退出條件
for, while, until
for 循環
v for 變量名 in 列表;do
循環體
done
v 執行 機制 :
依次 將列表中的元素賦值給“變量名”; 每次賦值后即執
行一次循環體; 直到列表中的元素耗盡,循環
for 循環
v 列表生成方式:
(1) 直接給出 列表
(2) 整數列表:
(a) {start..end}
(b) $(seq [start [step]] end)
(3) 返回列表的 命令
$(COMMAND)
(4) 使用glob, , 如:*.sh
(5) 變量引用;
$@, $*
while 循環
v while CONDITION; do
循環體
done
v CONDITION :循環控制條件;進入循環之前,先做一次判
斷;每一次循環之后會再次做判斷;條件為“true” ,則執行
一次循環;直到條件測試狀態為“false” 終止循環
v 因此:CONDTION 一般應該有循環控制變量;而此變量的值
會在循環體不斷地被修正
v 進入條件:CONDITION 為true; ;
v 退出條件:CONDITION 為false
until CONDITION; do
循環體
v done
v : 進入條件: CONDITION 為false
v : 退出條件: CONDITION 為true
創建無限循環
v while true; do
循環體
v done
v until false; do
循環體
Done
while 循環的特殊用法(遍歷文件的每一行):
while read line; do
循環體
done < /PATH/FROM/SOMEFILE
依次讀取/PATH/FROM/SOMEFILE 文件中的每一行,且將
行賦值給變量line
雙小括號方法,即((…)) 格式,也可以用于算術運算
雙小括號方法也可以使bash Shell 實現C 語言風格的變量操作
#I=10
#((I++))
v for 循環的特殊格式:
for (( 控制變量初始化; 條件判斷表達式; 控制變量的修正表達式))
do
循環體
done
v 控制變量初始化:僅在運行到循環代碼段時執行一次
v 控制變量的修正表達式:每輪循環結束會先進行控制變量修正運算
,而后再做條件判斷
break 命令可以帶一個參數,一個不帶參數的break 循環只能退出最內層的循環,而break N可以退出N 層循環。
continue 命令也可以帶一個參數,一個不帶參數的continue 命令只去掉本次循環的剩余代碼,而continue N 將會把N 層循環剩余的代碼都去掉,但是循環的次數不變。
#!/bin/sh
for i in "a b c d"
do
echo "$i "
for j in `seq 10`
do
if [ $j -eq 5 ];then
break
fi
echo "$j "
done
echo
done
break結果:
a 1 2 3 4
b 1 2 3 4
c 1 2 3 4
d 1 2 3 4
continue結果:
a 1 2 3 4 6 7 8 9 10
b 1 2 3 4 6 7 8 9 10
c 1 2 3 4 6 7 8 9 10
d 1 2 3 4 6 7 8 9 10
continue 2的結果:
a 1 2 3 4
b 1 2 3 4
c 1 2 3 4
d 1 2 3 4
作業題
1.隨機生成10以內的數字,實現猜字游戲,提示比較大或小,相等則退出
2.求100以內所有正整數之和
結果:
3.編寫腳本,通過ping命令探測10.1.252.1-254范圍內的所有主機的在線狀態,統計在線主機和離線主機各多少。
結果:
代碼:
#!/bin/bash
read -p "please input a IPv4(eg:10.1.0.100):" ip
up=0 down=0
ipv4=`echo $ip|cut -d. -f1-3`
n=1
until [ $n -gt 255 ]
do
IP="$ipv4"."$n"
#for ipv in {0..255} ;do
# IP="$ipv4"."$ipv"
let n++
ping "$IP" -c 1 -W 1 &>/dev/null && echo "The Up IPv4 is:$IP" && let up+=1 &>/dev/null || let down+=1 &>/dev/null
done
echo "IPv4($ipv4.1-255) up is :$up"
echo "IPv4($ipv4.1-255) down is :$down"
4.編寫腳本,打印九九乘法表
代碼:
#/bin/bash
i=1
j=1
until (($i>=10))
do
j=1
until (($j>$i))
do
sum=$[ $j*$i ]
echo -ne "$i*$j=$sum \t"
if [ $i == $j ] ;then
echo -en "\n"
fi
let j++
done
let i++
done
結果:
代碼:
5.編寫腳本,利用變量RANDOM生成10個隨機數字,輸出這個10數字,并顯示其中的最大者和最小者
6.編寫腳本,實現打印國際象棋棋盤
7.打印等腰三角形
代碼:
結果:
原創文章,作者:yywan1314,如若轉載,請注明出處:http://www.www58058.com/37023
文章對shell腳本的語法總結的很詳細,同時也通過練習來加深自己對腳本的認識了,排版方面需要用點心思,希望寫出優秀的博文。