流程控制可根据不同的情况做不同的处理,而且可重复执行指定的程序区域,在shell bash中流程控制可分为两大类:
"选择"和"循环"
1.选择:if、case、select
2.循环:for、while、until、select
命令结束状态返回值:
在shell中命令执行状态返回值分两种,成功和失败,0表示成功,非0表示失败
条件测试就是根据指定命令的状态返回值来选择执行相应命令
一、if条件判断:
分三种:
单分支if
双分支if
多分支if
单分支if:
if 条件判断; then
命令区域
fi
如果测试条件为真,则执行命令区中中所定义的代码
[root@CentOS6 ~]# cat if.sh #!/bin/bash # if id root &> /dev/null; then echo "root user exists." fi [root@CentOS6 ~]# bash if.sh root user exists. [root@CentOS6 ~]#
双分支if:
if 条件判断 ;then
命令区域1
else
命令区域2
fi
如果条件判断为真,则执行命令区域1中的代码,否则执行命令区域2的代码
[root@CentOS6 ~]# cat if.sh #!/bin/bash # if id rootsdf &> /dev/null; then echo "root user exists." else echo "rootsdf user not exists." fi [root@CentOS6 ~]# bash if.sh rootsdf user not exists. [root@CentOS6 ~]#
多分支if:
if 条件判断1 ;then
命令1
elif 条件判断2 ;then
命令2
…
else
命令3
fi
如果条件判断1为真,则执行命令1,如果为假,判断条件2是否为真,如果为真,则执行命令2,否则执行命令3,elif条件可以有多个
if [ $1 -gt $2 ];then echo "$1" elif [ $1 -lt $2 ];then echo "$2" else echo "相等" fi [root@CentOS6 ~]# bash if.sh 5 3 5 [root@CentOS6 ~]# bash if.sh 6 3 6 [root@CentOS6 ~]# bash if.sh 3 3 相等 [root@CentOS6 ~]#
二、条件判断:case语句
如果我们进行的条件测试多了起来,使用if和elif语法会显得很啰嗦,这时我们来使用case就比较简单了
case语法结构:
case $VAR in
PAT1)
命令1
;;
PAT2)
命令2
;;
PAT3)
命令3
…
*)
命令
esac
注意:case支持glob通配符:
*:匹配任意长度任意字符
?:匹配任意单个字符
[]:范围内任意单个字符
a|b:a或b
[root@CentOS6 ~]# cat if.sh #!/bin/bash # case $1 in start) echo "start" ;; stop) echo "stop" ;; restart) echo "restart" ;; *) echo "error" ;; esac [root@CentOS6 ~]# bash if.sh start start [root@CentOS6 ~]# bash if.sh stop stop [root@CentOS6 ~]# bash if.sh restart restart [root@CentOS6 ~]# bash if.sh ressdfsdf error [root@CentOS6 ~]#
三、select语句:主要用于创建菜单供用户选择
语法格式:
select 变量名 in 列表
do
循环体
done
按数字排列的菜单项显示在标准错误上,并显示PS3提示符,来提示用户输入内容
用户输入菜单列表中的某个数字,执行相应的命令,用户输入的内容江北保存在变量REPLY当中
select是个死循环,因此需要使用流程控制语句来控制循环体,例如:break 退出循环
select一般结合case语句使用
[root@CentOS6 ~]# cat select.sh #!/bin/bash # PS3="Your choice: " select i in one two do case $i in one) echo "$i" echo "您输入的是$REPLY" ;; two) echo "$i" echo "您输入的是$REPLY" ;; *) echo "Error" break ;; esac done [root@CentOS6 ~]# bash select.sh 1) one 2) two Your choice: 1 one 您输入的是1 Your choice: 2 two 您输入的是2 Your choice: 3 Error [root@CentOS6 ~]#
菜单列表省略,此时使用位置参数当做列表
read命令:把用户输入的内容保存在一个或多个变量中
-p:指定提示符
-t #:指定超时时间
[root@CentOS6 ~]# read -p "Please enter a string: " STRING Please enter a string: zhairuixiang [root@CentOS6 ~]# echo $STRING zhairuixiang [root@CentOS6 ~]#
原创文章,作者:zhai796898,如若转载,请注明出处:http://www.178linux.com/39455