常用选择、判断、循环语句
帐户 我是双子座
if选择语句
if通常用于判断当一个条件为真时,后面应该执行的动作或者命令,单分支if语句只进行一轮简单的判定,双分支进行两轮判定,多分支就是嵌套语句了,用于一个事件有多种情况的时候。
单分支
格式:
if 判断条件;then
条件为真的代码
fi
示例:if [ $1 –eq 0 ];then
echo “please input right args”
fi
双分支
格式:
if 判断条件; then
条件为真的分支代码
else
条件为假的分支代码
Fi
示例:
if [ $1 –eq 0 ];then
echo “please input right args”
else
echo “ok”
fi
多分支
格式:
if 判断条件1; then
条件为真的分支代码
elif 判断条件2; then
条件为真的分支代码
elif 判断条件3; then
条件为真的分支代码
else
以上条件都为假的分支代码
fi
示例:
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用于特定语句判断的时候比较方便,如判断年份,季节等。
case支持glob风格的通配符:
*: 任意长度任意字符
?: 任意单个字符
[]:指定范围内的任意单个字符
a|b: a或b
格式:
case 变量引用 in
PAT1)
分支1
;;
PAT2)
分支2
;;
...
*)
默认分支
;;
esac
示例:
read -p "yue ma?yes or no: " ANS
ans=`echo $ANS| tr -s "[a-z]" "[A-Z]"`
case $ans in
YES|Y)
echo "ok"
;;
NO|N)
echo "i am sorry to hear that"
;;
*)
echo "that is wrong"
;;
esac
for循环语句
for语句是比较常用的一种语句,通常用于循环语句,也可以嵌套循环,应用比较广泛。
格式:
for 变量名 in 列表;do
循环体
done
示例:
sum=0
for i in {1..5};do
let sum+=i
done
echo $sum
while循环语句
CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false”终止循环因此: CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正
格式:
while CONDITION; do
循环体
done
示例:
sum=0
i=1
while [ $i -le 100 ];do
let sum+=i
let i++
done
echo sum is $sum
while特殊用法
遍历文件的每一行。读取文件时,一行一行的读取,然后可以对每行进行操作。
格式:
while read line; do
循环体
done < /PATH/FROM/SOMEFILE
示例:
while read line;do
comment=`echo $line|cut -d : -f5`
usrname=`echo $line|cut -d : -f1`
if [ -z "$comment" ]; then
chfn -f "$usrname" $usrname &>/dev/null
chfn -p "0371" $usrname &>/dev/null
fi
done</etc/passwd
until循环语句
格式:
until CONDITION; do
循环体
done
示例:
until who|grep -q "hacker\>";do
sleep 0.5
done
pkill -9 -u hacker
continue循环控制语句
continu跳过本次循环,执行下次循环。
格式:
while CONDTIITON1; do
CMD1
...
if CONDITION2; then
continue
fi
CMDn
...
done
示例:
for ((i=1,sum=0;i<=100;i++));do
[ $i -eq 51 ]&& continue
[ $[i%2] -eq 1 ]&&let sum+=i
done
echo sum=$sum
结果:sum=2449
break循环控制语句
break终止循环,直接结束。
while CONDTIITON1; do
CMD1
...
if CONDITION2; then
break
fi
CMDn
...
done
示例:
for ((i=1,sum=0;i<=100;i++));do
[ $i -eq 51 ]&&break
[ $[i%2] -eq 1 ]&&let sum+=i
done
echo sum=$sum
结果:sum=625
shift循环控制语句
shift [n]
用于将参量列表 list 左移指定次数,缺省为左移一次。
参量列表 list 一旦被移动,最左端的那个参数就从列表中删除。 while 循环遍历位置参量列表时,常用到 shift
示例:
[ $# -eq 0 ] && echo “usage:`basename $0` arg1..”&& exit 1
while [ -n “$1” ];do
Useradd $1
Shift
done
select循环语句
select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示 PS3 提示符,等待用户输入用户输入菜单列表中的某个数字,执行相应的命令用户输入被保存在内置变量 REPLY 中
select与case
select 是个无限循环,因此要记住用 break 命令退出循环,或用 exit 命令终止脚本。也可以按 ctrl+c退出循环
select 经常和 case 联合使用与 for 循环类似,可以省略 in list, 此时使用位置参量
格式:
select variable in list
do
循环体命令
done
示例:
select menu in 胡辣汤 羊肉汤 米饭 包子 quit;do
case $REPLY in
1)
echo "the price is 10元"
;;
2)
echo "the price is 9"
;;
3)
echo "the price is 8"
;;
4)
echo "the price is 7"
;;
5)
echo "the price is nothing"
break
;;
esac
done