1.選擇執行:
a.單分支if語句:
if 判斷條件;then(此處必須有;和then then可以單獨占一行)
語句1
語句2
…
fi(fi必須單獨占一行)
b.雙分支if語句:
if 判斷條件;then(此處必須有;和then then可以單獨占一行時,分號可以省略)
語句1
語句2
…
else
語句3
語句4
…
fi(fi必須單獨占一行)
c.多分支if語句:
if 判斷條件;then(此處必須有;和then then可以單獨占一行時,分號可以省略)
語句1
語句2
…
elif 判斷條件;then
語句3
語句4
…
elif …
語句…
else
語句n
…
fi(fi必須單獨占一行)
※逐條件進行判斷,第一次遇為“真”條件時,執行其分支,而后結束整個if 語句
d.case語句
case SWITCH in
value1)
statement
…
;;
value2)
statement
…
;;
value3)
statement
…
;;
*)
statement
…
;;
esac
2.循環執行:將某代碼段重復運行多次
重讀運行多次:
循環次數事先已知
循環次數事先未知
有進入條件和退出條件
循環有 for while until
a.for循環:
for 變量名 in 列表;do
循環體
done
執行機制 :
依次將列表中的元素賦值給“變量名”;每次賦值后即執行一次循環體;直到列表中的元素耗盡,循環結束
※for循環根據列表執行,循環次數為列表中的次數
列表生成方式:
(1)直接給出列表
(2)整數列表
{start..end}
$(seq [start [step]] end)
(3)返回列表的命令
$(COMMAND)
(4)使用glob,如:*.sh
(5)變量引用;
$@,$*
b.while 循環
while CONDITION;do
循環體
done
CONDITION:循環控制條件;進入循環之前,先做一次判斷;每一次循環之后會再次做判斷;條件為“true” ,則執行一次循環;直到條件測試狀態為“false” 終止循環。因此:CONDTION一般應該有循環控制變量;而此變量的值會在循環體不斷地被修正
進入條件:CONDITION為true
退出條件:CONDITION為false
while當條件為真,執行循環,當條件為假,退出循環
while循環之后,還有命令的時候,當while循環結束后,會執行while后面的命令
c.until 循環
until CONDITION; do
循環體
done
CONDITION:循環控制條件;進入循環之前,先做一次判斷;每一次循環之后會再次做判斷;條件為“false” ,則執行一次循環;直到條件測試狀態為“ture” 終止循環
進入條件:CONDITION為false
退出條件:CONDITION為true
d.循環控制語句 continue
用于循環體中
continue [N]:提前結束第N層的本輪循環,而直接進入下一輪判斷;最內層為第1層
while CONDTIITON1; do
CMD1
…
if CONDITION2; then
CMD2
continue
fi
CMDn
…
done
e.循環控制語句break
用于循環體中
break [N]:提前結束第N層循環,最內層為第1層 層
while CONDTIITON1; do
CMD1
…
if CONDITION2; then
CMD2
break
fi
CMDn
…
done
f.創建無限循環
while true; do
循環體
done
until false; do
循環體
done
g.continue break exit的區別:
當循環條件滿足continue時,提起結束該輪while循環,進入下一輪while循環(結束的是本輪while循環)
當循環條件滿足break時,提前結束循環體的循環,改為執行循環之后的命令(結束的是循環體的執行)
當循環條件滿足exit時,提前結束腳本的執行,直接退出腳本的執行,exit # 可以指定退出的錯誤值#
練習題總結:
1、寫一個腳本/root/bin/createuser.sh ,實現如下功能:
使用一個用戶名做為參數,如果指定參數的用戶存在,就顯示其存在,否則添加之;顯示添加的用戶的id 號等信息
#!/bin/bash
read -p "please enter a username:" username
if id $username &>/dev/null ;then
echo "$username is exist."
else
echo "No such user."
echo "Adding $username….."
useradd $username
echo "Adding $username success."
id $username
fi
2、寫一個腳本/root/bin/yesorno.sh ,提示用戶輸入yes或no, 并判斷用戶輸入的是yes還是no, 或是其它信息
#!/bin/bash
read -p "please enter yes/no: " yesorno
case $yesorno in
[yY][Ee][Ss]|[Yy])
echo "Yes!!!"
;;
[Nn][Oo]|[Nn])
echo "No!!!"
;;
*)
echo "Other char!!!"
esac
3、寫一個腳本/root/bin/filetype.sh, 判斷用戶輸入文件路徑,顯示其文件類型(普通,目錄,鏈接,其它文件類型)
#!/bin/bash
read -p "please enter file: " filename
if [ -L $filename ];then
echo "$filename is Symbol file."
elif [ -c $filename ];then
echo "$filename is char file."
elif [ -d $filename ];then
echo "$filename is dir file."
elif [ -b $filename ];then
echo "$filename is block file."
elif [ -f $filename ];then
echo "$filename is common file."
elif [ -p $filename ];then
echo "$filename is pipe file."
elif [ -S $filename ];then
echo "$filename is socket file."
else
echo "please enter a Correct file"
fi
4、判斷/var/ 目錄下所有文件的類型
#!/bin/bash
for filename in /var/*;do
if [ -L $filename ];then
echo "$filename is Symbol file."
elif [ -c $filename ];then
echo "$filename is char file."
elif [ -d $filename ];then
echo "$filename is dir file."
elif [ -b $filename ];then
echo "$filename is block file."
elif [ -f $filename ];then
echo "$filename is common file."
elif [ -p $filename ];then
echo "$filename is pipe file."
elif [ -S $filename ];then
echo "$filename is socket file."
echo "please enter a Correct file"
fi
done
5、添加10個用戶user1-user10,密碼同用戶名
#!/bin/bash
for I in `seq 1 10`;do
if ! id user$I &>/dev/null;then
useradd user$I
echo "user$I" | passwd –stdin user$I
else
echo "The user$I has been exist."
fi
done
7、寫一個腳本,提示輸入正整數n的值,計算1+2+3+…n的總和
#!/bin/bash
read -p "please input a integer: " number
if [ $number -gt 0 ] ;then
for i in `seq 1 $number`;do
sum=$[$sum+$i]
done
echo $sum
else
echo "please input a integer."
fi
8、打印九九乘法口訣
#!/bin/bash
for i in {1..9};do
for j in `seq 1 $i`;do
echo -ne "$i*$j=$(($i*$j))\t"
let j++
done
echo -e "\n"
let i++
done
#!/bin/bash
i=1
while [ $i -le 9 ]
do
j=1
while [ $j -le $i ]
do
echo -ne "$i*$j=$(($i*$j))\t"
let j++
done
echo -e "\t"
let i++
done
9、求100以內所有正整數之和
#!/bin/bash
sum=0
i=0
while [ $i -le 100 ]
do
sum=$[$sum+$i]
let i++
done
echo $sum
10、通過ping 命令探測10.1.252.1-254 范圍內的所有主機的在線狀態,統計在線主機和離線主機各多少。
#!/bin/bash
I=1
while [ $I -le 255 ]
do
if ping -c 1 -W 1 10.1.252.$I &> /dev/null;then
echo -e "10.1.252.$I online."
else
echo -e "10.1.252.$I offline."
fi
let I++
done
11、利用變量RANDOM 生成10個隨機數字,輸出這個10數字,并顯示其中的最大者和最小者
#!/bin/bash
number=`echo $[RANDOM%10+1]`
echo $number
read -p "please input number: " n
until [ $n -eq $number ]
do
if [ $n -lt $number ];then
read -p "please input a number > $n :" n
else
read -p "please input a number < $n :" n
fi
done
echo "You are right !!!"
12、隨機生成10以內的數字,實現猜字游戲,提示比較大或小,相等則退出。
#!/bin/bash
number=`echo $[RANDOM%10+1]`
echo $number
read -p "please input number: " n
until [ $n -eq $number ]
do
if [ $n -lt $number ];then
read -p "please input a number > $n :" n
else
read -p "please input a number < $n :" n
fi
done
echo "You are right !!!"
原創文章,作者:sjsir,如若轉載,請注明出處:http://www.www58058.com/37389
文章對循環語句的語法進行了總結,并且通過示例加深了自己對語句相應的語法認識和理解,shell腳本要想寫好了,只有多寫,多讀優秀代碼。