流程控制语句:case
控制语句:用来实现对程序流程的选择、循环、转向和返回等进行控制。case是开关语句的一个组成部分;
它是根据变量的不同进行取值比较,然后针对不同的取值分别执行不同的命令操作适用于多分支,是一个多选择语句.
case 变量或表达式 in 变量或表达式1) 命令序列1 ;; 变量或表达式2) 命令序列2 ;; …… *) 默认命令序列 esac
case语句执行流程控制:
执行流程:
首先使用“变量或表达式”的值与值1进行比较,若取值相同则执行值1后的命令序列,直到遇见双分号“;; ”后跳转至esac,表示分支结束;
若与值1不相匹配,则继续与值2 进行比较,若取值相同则执行值2 后的命令序列,直到遇见双分号“;; ”后跳转至esac,表示结束分支。
依次类推,若找不到任何匹配的值,则执行默认模式“ *) ”后的命令序列,直到遇见esac后结束分支
注意事项:
“变量或表达式”后面必须为单词in,每一个“变量或表达式”的值必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;
匹配中的值可以是多个值,通过“|”来分隔
例1:编写一个操作文件的脚本
[root@xuegod63 ~]# cat case-1.sh
######################################################################### # File Name: case-1.sh # Author: xuegod ######################################################################### #!/bin/bash cat <<eof ***************** ** 1. backup ** ** 2. copy ** ** 3. quit ** ***************** eof read -p "Input a choose: " OP case $OP in 1|backup) echo "BACKUP......" ;; 2|copy) echo "COPY....." ;; 3|quit) exit ;; *) echo error esac
例2:编写一个启动apache服务脚本
# yum install httpd -y
# vim case-2.sh
#!/bin/bash case $1 in start) systemctl $1 httpd ps aux|grep httpd echo "httpd start" ;; stop) systemctl $1 httpd ps aux|grep httpd echo "httpd stop" ;; status) systemctl $1 httpd ;; restart) systemctl $1 httpd echo "httpd restart" ;; *) echo "USAGE: $0 start|stop|restart" esac