常用选择、判断、循环语句

 

 

 

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: ab

格式:

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

selectcase

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