Shell流程控制

时间:2022-07-24
本文章向大家介绍Shell流程控制,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

使用if语句

if条件语句:设定一个条件如果怎么,然后怎么样,if语句的选择结构可以分为三种基本类型,适用于不同的应用场合。

单分支if语句的语法结构:

if 
条件测试操作
then 
命令序列
fi

单分支if语句应用示例:

[root@linux /]# vim xxx.sh
#!/bin/bash
www=/www          #变量赋值
if [ -d $www ]    #判断$www变量是不是目录
then
        echo 这是一个目录
fi
[root@linux /]# sh xxx.sh 
这是一个目录

多分支if语句

对于多分支的选择结构,要求针对 条件成立和条件不成立 两种情况分别执行不同的操作

双分支if语句的语法结构:

if 
条件测试操作
then 
命令序列1
else 
命令序列2
fi

双分支if语句应用示例:

#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 >> /dev/null            #检查目标主机是否可以连通 $1变量是第一个参数
if                                                                #关键字(如果)
[ $? -eq 0 ]                                        #测试上一条命令的返回结果
then                                                          #关键字(那么)
echo "Host $1 is up"
else                                                          3关键字(否则)
echo "Host $1 is down"
fi         

多分支if语句 多分支if语句语法结构:

if  
条件测试操作1
then  
命令序列1
elif  
条件测试操作2 
then  
命令序列2
else
命令序列3
fi

多分支if语句应用示例:

[root@linux /]# vim xxx.sh
#!/bin/bash
if [ $1 -lt $2 ]
then
    echo "$1 < $2"
elif [ $1 -eq $2 ]
then
    echo "$1 = $2"
else
    echo "$1 > $2"
fi

[root@linux /]# sh xxx.sh 1 0
1 > 0
[root@linux /]# sh xxx.sh 1 1
1 = 1
[root@linux /]# sh xxx.sh 1 2
1 < 2

for循环语句

for循环语句的语法结构:

for 变量名 in 取值列表
do
  命令序列
done

for语句应用示例:

[root@linux /]# cat xxx.txt   #需要创建的用户列表
test1
test2
test3

[root@linux /]# vim xxx.sh 
#!/bin/bash
xxx=`cat /xxx.txt`
for  i in $xxx
do
    useradd $i   #创建用户
    echo "123456" |passwd --stdin $i > /dev/null    #设置密码
done

[root@linux /]# sh xxx.sh   #验证
[root@linux /]# tail -3 /etc/passwd
test1:x:1007:1007::/home/test1:/bin/bash
test2:x:1008:1008::/home/test2:/bin/bash
test3:x:1009:1009::/home/test3:/bin/bash

while循环语句

while循环语句的语法结构:

while 条件测试操作
do
命令序列
done

while语句应用示例:

[root@linux /]# vim xxx.sh
#!/bin/bash
while [ "$w" != "yes" ]
do
read -p "请输入yes退出循环:" w
done

[root@linux /]# sh xxx.sh 
请输入yes退出循环:no
请输入yes退出循环:yes
[root@linux /]#

case分支语句

case语句的语法结构

case  变量值  in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
 ……
* )
默认命令序列
esac

case语句应用实例:

#!/bin/bash
nginx="/www/server/nginx/sbin/nginx"

case "$1" in
start)
    $nginx
    echo 正在启动Nginx访问
;;
stop)
    pkill nginx
    echo 正在停止Nginx服务
;;
restart)
    $nginx -s restart
    echo 正在重新启动Nginx服务
;;
reload)
    $nginx -s reload
    echo 正在重载Nginx服务
;;
*)
echo "Usage:$0 (start|stop|restart|reload)"
esac

[root@linux /]# curl -I -s 127.0.0.1|sed -n '1p'   #可以访问
HTTP/1.1 200 OK
[root@linux /]# sh sss.sh stop   #关闭Nginx服务
正在停止Nginx服务
[root@linux /]# curl -I -s 127.0.0.1|sed -n '1p'   #不能访问
[root@linux /]# sh sss.sh start  #启动Nginx
正在启动Nginx访问
[root@linux /]# curl -I -s 127.0.0.1|sed -n '1p'   #可以访问
HTTP/1.1 200 OK