shell脚本学习之基础篇三:流程控制语句(if...else、elif、case)

shell脚本的流程控制语句

    • 一、流程控制语句
      • 1、基本语法
        • (1)if结构
        • (2)if...else结构
        • (3)if...elif...else结构
        • (4)case结构

一、流程控制语句

本质在于选择。如果怎么样,就怎么样,否则怎么样。

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 
请输入一个字母/数字/字符:^
你输入的是特殊字符

你可能感兴趣的:(Linux)