shell复习(3)-循环

流程控制

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
  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值