回顧bash編程之循環控制:
for varName in LIST; do
循環體
done
while CONDITION; do
循環體
done
until CONDITION; do
循環體
done
下面學習循環控制:
continue: 提前結束本次循環而開始評估下一輪;
break [n]: 跳出當前循環,去執行本次循環體外的語句,n控制跳出底基層循環,默認是第一層
練習:求100以內所有偶數之和;
declare -i evenSum=0
declare -i i=1
while [ $i -le 100 ]; do
if [ [$i%2] -eq 1 ]; then
let i++
continue
fi
let evenSum+=$i
let i++
done
練習:提示用戶輸入用戶名,顯示用戶的ID號;直到用戶輸入quit退出;
腳本中有這一種break可以退出死循環
#!/bin/bash
#
if [ $UID -ne 0 ]; then
echo "basename $0
must be running as root"
exit 1
fi
while true; do 這裏是一個死循環,只寫一個true就行了
read -p "Enter a user name: " userName
if [ "$userName" == 'quit' ]; then
break
fi
id -u $userName
done
下面這一個是檢查輸入的用戶是不是存在的用戶(結合了continue和break)
#!/bin/bash
#
while true; do
read -p "Enter a user name: " userName
if [ "$userName" == 'quit' ]; then
break
fi
if ! id $userName &> /dev/null; then
echo "$userName not exist."
continue
fi
echo -e "this $userName uid is `id -u $userName`"
done
練習:寫一個腳本,
1、提示用戶輸入一個磁盤設備的設備文件,如果設備文件不存在,就提示用戶重新輸入,直到用戶輸入正確爲止;
2、用戶可以輸入quit退出;
#!/bin/bash
#
while true; do
read -p "Enter a block device file: " diskFile
if [ "$diskFile" == 'quit' ]; then
exit 7
fi
if [ -b "$diskFile" ]; then
break
else
echo "Wrong device file..."
fi
done
練習:擴展前一題
當用戶給出正確的塊設備後:
1、顯示用戶輸入塊設備,並提示用戶,後續的操作會損壞設備上的所有文件,讓用戶選擇是否繼續
2、如果用戶輸入y,則繼續後面的操作;
3、如果用戶輸入n,則顯示用戶選擇了中止,並退出腳本;
4、輸入任何其它字符,則讓用戶重新選擇;
練習:擴展上一題
1、如果用戶選擇了y, 則抹除指定塊設備上的所有分區;
#!/bin/bash
#
while true; do
read -p "Enter a block device file: " diskFile
if [ "$diskFile" == 'quit' ]; then
exit 7
fi
if [ -b "$diskFile" ]; then 我們做字符串比較時,加上雙引號,因爲爲空的時候不好判斷,爲空的時候也不知道他是不是文件,默認的這種比較時通過的
break
else
echo "Wrong device file..."
fi
done
echo "Device is: $diskFile."
while true; do
read -p "Y or y for continue, N or n for quiting: " option
option=echo $option | tr 'A-Z' 'a-z'
輸入的任何字符都轉換成小寫的
if [ "$option" == 'n' ]; then
exit 8
fi
if [ "$option" == 'y' ]; then
break
else
echo "Wrong input..."
fi
done
dd if=/dev/zero of=$diskFile bs=512 count=1
練習:寫一個腳本
1、提示用戶輸入一個目錄路徑;
2、顯示目錄下至少包含一個大寫字母的文件名;
#!/bin/bash
#
while true; do
read -p "Enter a directory: " dirName
[ "$dirName" == 'quit' ] && exit 3
[ -d "$dirName" ] && break || echo "Wrong directory..."
done
for fileName in $dirName/; do
if [[ "$fileName" =~ .[[:upper:]]{1,}.* ]]; then 這裏的{}不需要反斜槓轉意
echo "$fileName"
fi
done
練習:寫一個腳本
前提:配置好yum源
1、如果本機沒有一個可用的yum源,則提示用戶,並退出腳本(4);如果此腳本非以
root用戶執行,則顯示僅有root纔有權限安裝程序包,而後退出(3);
2、提示用戶輸入一個程序包名稱,而後使用yum自動安裝之;儘可能不輸出yum命令執行
中的信息;
如果安裝成功,則綠色顯示,否則,紅色顯示失敗;
3、如果用戶輸入的程序包不存在,則顯示錯誤後讓用戶繼續輸入;
4、如果用戶輸入quit,則正常退出(0);
5、正常退出前,顯示本地共安裝的程序包的個數;