bash程式設計之迴圈控制:
阿新 • • 發佈:2018-11-23
bash程式設計之迴圈控制:
for varName in LIST; do
迴圈體
done
while CONDITION; do
迴圈體
done
until CONDITION; do
迴圈體
done
迴圈控制:
continue: 提前結束本次迴圈而開始評估下一輪;
break [n]: 跳出當前迴圈
練習:求100以內所有偶數之和;
declare -i sum=0
for i in {1..100}
do
if [ $[$i%2] -eq 0 ];then
let sum+=$i
fi
done
echo $sum
或:
declare -i evenSum=0
declare -i i=1
while [ $i -le 100 ]; do
if [ $[$i%2] -eq 0 ]; then
let evenSum+=$i
fi
let i++
done
echo $evenSum
declare -i evenSum=0
declare -i i=2
while [ $i -le 100 ]; do
let evenSum+=$i
let i+=2
done
echo $evenSum
練習:提示使用者輸入使用者名稱,顯示使用者的ID號;直到使用者輸入quit退出;
#!/bin/bash
#
if [ $UID -ne 0 ]; then
echo "`basename $0` must be running as root"
exit 1
fi
while true; do
read -p "Enter a user name: " userName
if [ "$userName" == 'quit' ]; then
break
fi
id -u $userName
done
#!/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
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、正常退出前,顯示本地共安裝的程式包的個數;