一、流程控制语句
本质在于选择。如果怎么样,就怎么样,否则怎么样。
1、基本语法
(1)if结构
如果满足条件,就执行命令,然后结束
if [条件判断];then
command
fi
if [条件判断]
then
command
fi
例1:如果传递的位置参数为hello,就打印hello,否则不做任何事
[root@server myscripts]# vim if.sh
#!/bin/bash
if [ "$1" = "hello" ];then
echo hello
fi
[root@server myscripts]# . if.sh
[root@server myscripts]# . if.sh hello
hello
(2)if…else结构
如果满足条件,就执行1命令,如果不满足,就执行2命令,然后结束。本质是2选1
if [条件判断];then
command 1
else
command 2
fi
例1:如果传递的位置参数为hello,就打印hello,否则打印world
[root@server myscripts]# vim if.sh
#!/bin/bash
if [ "$1" = "hello" ];then
echo hello
else
echo world
fi
[root@server myscripts]# . if.sh
world
[root@server myscripts]# . if.sh hello
hello
例2:测试两主机之间是否互通
[root@server myscripts]# vim if1.sh
#!/bin/bash
read -p "请输入你要ping的主机ip:" IP
ping -c1 $IP &> /dev/null
if [ $? -eq 0 ];then
echo "当前主机和远程主机$IP是互通的"
else
echo "当前主机和远程主机$IP是不通的"
fi
[root@server myscripts]# . if1.sh
请输入你要ping的主机ip:192.168.100.200
当前主机和远程主机192.168.100.200是不通的
[root@server myscripts]# . if1.sh
请输入你要ping的主机ip:192.168.100.100
当前主机和远程主机192.168.100.100是互通的
例3:测试httpd进程是否存在
[root@sjserver ~]# vim if2.sh
#!/bin/bash
pgrep httpd &> /dev/null
[ $? -eq 0 ] && echo "进程httpd存在" || echo "进程httpd不存在"
[root@sjserver ~]# . if2.sh
进程httpd不存在
[root@sjserver ~]# systemctl start httpd
[root@sjserver ~]#
[root@sjserver ~]# . if2.sh
进程httpd存在
(3)if…elif…else结构
如果满足条件1,就执行命令1然后结束
如果不满足条件1,就判断条件2,如果满足,就执行命令2然后结束
如果不满足条件1和条件2,就判断条件3,如果满足,就执行命令3然后结束
如果以上条件都不满足,就执行命令4然后结束。
本质就是选择可以有很多,但是只能选择一个执行,中间可以有多个elif
if [条件判断 1];then
command 1
elif [条件判断 2];then
command 2
elif [条件判断 3];then
command 3
else
command 4
fi
例1:如果1等于1,则打印1,如果0不等于2,就打印2,如果都不是,则打印3
[root@server myscripts]# vim if.sh
#!/bin/bash
if [ 1 -eq 1 ];then
echo 1
elif [ 0 -ne 2 ];then
echo 2
else
echo 3
fi
[root@server myscripts]# . if.sh //从上往下执行,1等于1为真就打印1然后结束不会再判断第二个条件
1
(4)case结构
本质就是逐项匹配,把有可能的结果全部列出一一匹配,匹配到的就执行命令然后退出,*代表其他所有
case 变量 in
Value1 | Value4)
command
;;
value2)
command
;;
value3)
command
;;
*)
command
;;
esac
例1:判断用户输入的是字母还是数字还是特殊字符
[root@server myscripts]# vim case.sh
#!/bin/bash
read -p "请输入一个字母/数字/字符:" n
case $n in
[0-9])
echo "你输入的是数字"
;;
[a-z]|[A-Z])
echo "你输入的是字母"
;;
*)
echo "你输入的是特殊字符"
esac
[root@server myscripts]# . case.sh
请输入一个字母/数字/字符:1
你输入的是数字
[root@server myscripts]# . case.sh
请输入一个字母/数字/字符:g
你输入的是字母
[root@server myscripts]# . case.sh
请输入一个字母/数字/字符:D
你输入的是字母
[root@server myscripts]# . case.sh
请输入一个字母/数字/字符:^
你输入的是特殊字符