流程控制语句

1、条件语句

  对于先做判断在选择路径的情况,使用分支结构,这需要用到条件语句。条件语句用于根据指定的条件来选择执行程序,实现程序的分支结构。Shell提供了2个条件语句:if和case。

1、if语句

  if语句通过判定条件表达式做出选择。大多数情况下,可以使用test命令来对条件进行测试,比如可以比较字符串、判断文件是否存在。例如

if test $[vall] -eq $[val2]

  实际应用中通常用方括号来代替test.

 根据语法格式,if语句可分为以下三种类型

(1)if...else

if [ 条件表达式 ]
then 
  语句序列  
fi

  这是最简单的if机构,如果条件表达式结果返回true,"then"后面的语句将会执行,否则不会执行任何语句。最后必须以fi语句结尾来闭合if语句。下面给出一个简单的例子。

#!/bin/bash
a=1
b=2
if [ $a -lt $b ]
then 
	echo "a<b"
fi

(2)if...else...fi

   语法格式如下:

if [ 条件表达式 ]
then 
    语句序列1
else
    语句序列2
fi

  如果条件表达式返回true,那么then后面的语句将会执行,否则执行"else”后面的语句。下面给出一个简单的例子

#!/bin/bash
a=2
b=1
if [ $a -lt $b ]
then 
	echo "a<b"
else
	echo "a!<b"
fi

  

(2)if...elif...fi

  这种结构可以对多个条件进行判断,语法格式如下:

if [ 条件表达式1]
then 
    语句序列1
elif [ 条件表达式2]
then
    语句序列2
elif [ 条件表达式3]
then
    语句序列3
....
    else
    语句序列n
fi

  哪一个表达式为true,就执行哪个表达式后面的语句;如果都为false,那么执行else后面的语句。下面给出一个示例

#!/bin/bash
a=2
b=1
if [ $a == $b ]
then 
    echo "a=b"
elif [ $a -gt $b ]
then
    echo "a>b"
elif [ $a -lt $b ]
then
    echo "a<b"
else
    echo "input error"
fi

2、case语句

  这是一种多选择结构,与其他语言中的“switch...case"语句类似。case语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令。如果存在很多条件,那么可以使用case语句来代替if语句。case语句的语法格式如下:

case 值 in
模式1)
语句序列1
;;
模式2)
语句序列2
;;
...
模式n)
语句序列n
;;
*)
    其他语句序列
esac

  值可以是变量或常数。模式可以包含多个值,使用”|“将各个值分开,只要值匹配模式中的一个值即可视为匹配。例如”3|5“表示匹配3或5均可。

  Shell将值逐一同各个模式进行比较,当发现匹配某一模式后,就执行该模式后面的语句序列。直到遇见两个分号;;为止。;;与其他语言中的break类似,用于终止语句执行,跳到整个case结构的最后。*表示任意模式,如果不能撇陪任何模式,则执行*后面的语句序列。由于case语句依次检查匹配模式,”*)“应当放在最后。

  下面给出一个示例,显示当前登录Linux的用户

#!/bin/bash
case $USER in
li)
echo "欢迎用户登录"
;;
root)
echo "超级管理员"
echo "欢迎登陆"
;;
*)
echo "欢迎 $USER!";
esac

  

2、循环结构

  Shell提供的循环结构有3种,分别是while、until和for。

1、循环语句while

  while循环用于不断执行一系列命令,直到测试条件为假。其语法格式如下:

while 测试条件
do
    语句序列
done

  命令执行完,控制返回循环顶部,然后在做条件测试,直到测试条件为假时才终止while语句的执行。只要测试条件为真,do和done之间就一直会进行。

  下面给出一个实例,用while循环求1~100的总和。

#!/bin/bash
total=0
num=0
while [ $num -le 100 ]
do 
	total=`expr $total + $num`
	num=`expr $num + 1`
done 
echo "结果等于 $total"

  

2、循环语句until

  until循环用来执行一系列命令,直到所指定的条件为真时才终止循环,基本格式如下:

until 测试条件
do
    语句序列
done

  先进行条件测试,如果返回值为假,则继续返回循环体内的语句,否则跳出循环。

  until循环于while循环在处理方式上刚好相反,一般while循环优于until循环,但在极少数的情况下,until循环更加有用。

  同样,用until循环求1~100的总和。

#!/bin/bash
total=0
num=0
until [ $num -gt 100 ]
do 
	total=`expr $total + $num`
	num=`expr $num + 1`
done 
echo "结果等于 $total"

  

3、循环语句for

  until和while循环通常用于条件性循环,遇到特定的条件才会终止循环。而for循环适用于明确知道重复执行次数的情况,其语法格式如下:

for 变量 [in 列表]
do 
    语句序列
done

  其中变量是指要在循环内部用来匹配列表当中的对象,列表是在for循环的内部要操作的对象,可以是一组值组成的序列,每个值通过空格分隔,每循环一次,就将列表中的下一个值赋给变量。"in 列表"是可选的,如果不用它,for循环将自动使用命令行的位置参数。

例如下面脚本按顺序输出列表中的数字。

for val in 1 2 3 4 5 6 7 
do 
echo $val
done

  

下面的脚本显示主目录下的文件

#!/bin/bash
for FILE in $HOME/*.*
do 
   echo $FILE
done

  

4、其他循环语句

  在循环过程中,有时候需要在未达到循环条件时强制跳出循环,像大多数编程语言一样,Shell也可以使用break和continue来跳出循环。

  break语句用来终止一个重复执行的循环。这种循环可以是for、until、或者while语句构成的循环。其语法格式如下:

break [n]

  其中n表示要跳出的几层循环,默认值是1,表示只跳出一层循环。

  下面是一个嵌套循环的例子,如果var1等于4,并且var2等于2,就跳出循环。

#!/bin/bash
for var1 in 1 4 7
do 
   for var2 in 2 5 8
do 
  if [ $var1 == 4 -a $var2 == 2 ]
   then 
	break 2
   else
	echo "第一层: $var1"
	echo "第二层: $var2"
  fi
done
done

  

continue 语句跳过循环体中位于它后面的语句,回到本层循环的开头,并进行下一次的循环。其语法格式如下:

continue [n]

  其中n表示从包含continue语句的最内层循环体向外调到第n层循环。

exit用来退出一个Shell程序,并设置退出值。其语法格式如下:

exit [n]

  其中n是设定的退出值。如果未给出n值,则退出值为最后一个命令的执行状态。

 

posted @ 2018-04-17 09:54  noticeable  阅读(175)  评论(0编辑  收藏  举报