流程控制
1.if语句
单分支
if 条件表达式
then
命令序列
fi
#!/bin/bash
N=10
if [ $N -gt 5 ]; then
echo yes
fi
# bash test.sh
yes
双分支
if 条件表达式
then
命令序列1
else
命令序列2
fi
#!/bin/bash
N=10
if [ $N -lt 5 ]; then
echo yes
else
echo no
fi
# bash test.sh
no
判断crond进程是否运行
#!/bin/bash
NAME=crond
NUM=$(ps -ef |grep $NAME |grep -vc grep)
if [ $NUM -eq 1 ]; then
echo "$NAME running."
else
echo "$NAME is not running!"
fi
检查主机是否存活
>/dev/null 将 ping 命令的输出重定向到 /dev/null,这意味着任何输出都不会显示在终端上。
#!/bin/bash
if ping -c 1 192.168.1.1 >/dev/null; then
echo "OK."
else
echo "NO!"
fi
多分支
if 条件表达式1
then
命令序列1
elif 条件表达式2
then
命令序列2
...
else
命令序列
fi
2.for语句
for 变量名 in 取值列表; do
命令
done
for 的语法也可以这么写:
#!/bin/bash
for i in "$@"; { # $@是将位置参数作为单个来处理
echo $i
}
# bash test.sh 1 2 3
1
2
3
举个例子
检查多个主机是否存活
#!/bin/bash
for ip in 192.168.1.{1..254}; do
if ping -c 1 $ip >/dev/null; then
echo "$ip OK."
else
echo "$ip NO!"
fi
done
3.while语句
while 条件表达式; do
命令
done
当条件表达式为 false 时,终止循环。条件表达式为 true,将会产生死循环
实例:逐行处理文本
[root@node1 text]# cat a.txt
a b c
1 2 3
x y z
方法一:
#!/bin/bash
cat ./a.txt | while read linf; do
echo $linf
done
[root@node1 text]# ./test.sh
a b c
1 2 3
x y z
方法二:
#!/bin/bash
while read LINE; do
echo $LINE
done < ./a.txt
方法三:
#!/bin/bash
exec < ./a.txt # 读取文件作为标准输出
while read LINE; do
echo $LINE
done
4.break和continue语句
break 是终止循环。
continue 是跳出当前循环。
示例 1:在死循环中,满足条件终止循环
#!/bin/bash
N=0
while true; do
let N++
if [ $N -eq 5 ]; then
break
fi
echo $N
done
# bash test.sh
1
2
3
4
里面用了 if 判断,并用了 break 语句,它是跳出循环。与其关联的还有一个 continue 语句,它是
跳出本次循环。
示例 2:举例子说明 continue 用法
#!/bin/bash
N=0
while [ $N -lt 5 ]; do
let N++
if [ $N -eq 3 ]; then
continue
fi
echo $N
done
# bash test.sh
1
2
4
5
当变量 N 等于 3 时,continue 跳过了当前循环,没有执行下面的 echo。
注意:continue 与 break 语句只能循环语句中使用。
5.case语句
case 模式名 in
模式 1)
命令
;;
模式 2)
命令
;;
*)
不符合以上模式执行的命令
esac
举个例子
#!/bin/bash
case $1 in
start)
echo "start."
;;
stop)
echo "stop."
;;
restart)
echo "restart."
;;
*)
echo "Usage: $0 {start|stop|restart}"
esac
结果
[root@node1 text]# bash test.sh
Usage: test.sh {start|stop|restart}
[root@node1 text]# bash test.sh start
start.
[root@node1 text]# bash test.sh stop
stop.
[root@node1 text]# bash test.sh restart
restart.
[root@node1 text]#
上面例子是不是有点眼熟,在 Linux 下有一部分服务启动脚本都是这么写的。
6.select语句
select 是一个类似于 for 循环的语句。
select 变量 in 选项 1 选项 2; do
break
done
例子
#!/bin/bash
select mysql_version in 5.1 5.6; do
echo $mysql_version
done
# bash test.sh
1) 5.1
2) 5.6
#? 1
5.1
#? 2
5.6
标签:bin,shell,复习,sh,echo,循环,done,test,bash
From: https://blog.csdn.net/sjsnsvsjsm/article/details/140920601