回顾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、正常退出前,显示本地共安装的程序包的个数;
原文地址:http://blog.51cto.com/425319153/2092868