流程控制语句
一、if语句
1.语法
if condition1 then command1 elif condition2 then command2 else commandN fi
写成一行(适用于终端命令提示符):
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
2.举例
#!/bin/bash a=10 b=20 if [ $a -eq $b ] then echo "a 等于 b" elif [ $a -lt $b ] then echo "a 小于 b" else echo " a 大于 b" fi
输出
[root@hadoop-node01 ~]# . s8.sh a 小于 b
注意
[ condition ] (注意condition前后要有空格)
二、case语句
Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。
case 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN ;; esac
举例
#!/bin/bash case $1 in start) echo "开始执行了..." ;; stop) echo "执行完成...." ;; *) echo "其他操作" esac
输出:
[root@hadoop-node01 ~]# vim s9.sh [root@hadoop-node01 ~]# . s9.sh 其他操作 [root@hadoop-node01 ~]# . s9.sh start 开始执行了... [root@hadoop-node01 ~]# . s9.sh stop 执行完成....
取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;
三、循环语句
1.for循环
for循环一般格式为
for var in item1 item2 ... itemN do command1 command2 ... commandN done
写成一行
for var in item1 item2 ... itemN; do command1; command2… done;
举例
#!/bin/bash for i in 1,2,3,4 do echo $i done echo "------1------" for i in {1..5} do echo $i done echo "------2----" for a in {1..5} ; do echo $a; done; echo "-----3------" for((i=0;i<10;i++)) do echo $i done echo "-----4-----" for((i=0;i<5;i++)); do echo $i ;done;
输出:
[root@hadoop-node01 ~]# . s10.sh 1,2,3,4 ------1------ 1 2 3 4 5 ------2---- 1 2 3 4 5 -----3------ 0 1 2 3 4 5 6 7 8 9 -----4----- 0 1 2 3 4
break和continue关键字
#!/bin/bash for i in {1..10} do if [ $i -eq 5 ] then break; fi echo $i done echo "-------------" for i in {1..10} do if [ $i -eq 5 ] then continue fi echo $i done
输出
[root@hadoop-node01 ~]# . s11.sh 1 2 3 4 ------------- 1 2 3 4 6 7 8 9 10
2.where循环
while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。
while condition do command done
举例
#!/bin/bash i=1 while(( $i<=5)) do echo $i let i++ done
使用中使用了 Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量
无限循环
while : do command done
三、read语句
语法
read -p(提示语句)-n(字符个数) -t(等待时间 单位秒)
案例
[root@hadoop-node01 ~]# read -p 请输入密码: -n 10 -t 10 password 请输入密码:123456 [root@hadoop-node01 ~]# echo $password 123456