day03:if语句
条件判断——if语句
就像语文造句子,假如.......就....或者......就.....否则.......就....
接下来就以比较两个整数数值的大小来学习if语句
①单分支:一个条件一个结果
if 条件判断表达式
then ##条件判断表达式返回为真,执行语句1
语句1
fi
例如:
vim /server/scripts/day03.sh #!/bin/bash read -p "请输入第一个整数数字:" num1 ##接受用户输入的第一个变量,赋值给变量num1 read -p "请输入第二个整数数字:" num2 ##接受用户输入的第二个变量,赋值给变量num2 if [ $num1 -gt $num2 ] ##判断变量num1大于变量num2,是否为真 then ##判断语句为真,执行then语句 echo "${num1}大于${num2}" fi
执行:
[root@rhel4 ~]# bash /server/scripts/day03.sh 请输入第一个整数数字:12 请输入第二个整数数字:11 12大于11
看似成功了,看下面的例子
假如输入两个相同的整数、或者输入的第一个小、第二个大。那么条件判断表达式都是不成立的,自然没有任何的输出
②双分支:一个条件两个结果
if 条件判断表达式
then ##条件判断表达式返回为真,执行语句1
语句1
else ##条件判断表达式返回为假,执行语句2
语句2
fi
例如:
vim /server/scripts/day03.sh #!/bin/bash read -p "请输入第一个整数数字:" num1 ##接受用户输入的第一个变量,赋值给变量num1 read -p "请输入第二个整数数字:" num2 ##接受用户输入的第二个变量,赋值给变量num2 if [ $num1 -gt $num2 ] ##判断变量num1大于变量num2,是否为真 then ##判断语句为真,执行then语句 echo "${num1}大于${num2}" else ##判断语句为假,执行else语句 echo "${num1}小于${num2}" fi
执行:
[root@rhel4 ~]# bash /server/scripts/day03.sh 请输入第一个整数数字:12 请输入第二个整数数字:11 12大于11 [root@rhel4 ~]# bash /server/scripts/day03.sh 请输入第一个整数数字:11 请输入第二个整数数字:12 11小于12
看似好了一点,但没有bug吗?
再次查看if语句,发现了判断语句的处理流程。
首先判断12大于12,显然判断不成立,返回为假
执行else语句,输出语句,所以不严谨。因此升级一下脚本
else中可以嵌套if语句,也就是说,可以多次判断,类似 条件1 && 条件2 && 条件3
③else语句桥套if语句,进行多次判断
例如:
vim /server/scripts/day03.sh #!/bin/bash read -p "请输入第一个整数数字:" num1 ##接受用户输入的第一个变量,赋值给变量num1 read -p "请输入第二个整数数字:" num2 ##接受用户输入的第二个变量,赋值给变量num2 if [ $num1 -gt $num2 ] ##判断变量num1大于变量num2,是否为真 then ##判断语句为真,执行then语句 echo "${num1}大于${num2}" else ##判断语句为假,执行else语句,也就是说,已经判断出变量1不大于变量2(小于或者等于) if [ ${num1} -eq ${num2} ] ##继续判断,变量num1等于变量num2,是否为真 then echo "${num1}等于${num2}" else echo "${num1}小于${num2}" fi fi
执行:
[root@rhel4 ~]# bash /server/scripts/day03.sh 请输入第一个整数数字:11 请输入第二个整数数字:12 11小于12 [root@rhel4 ~]# bash /server/scripts/day03.sh 请输入第一个整数数字:12 请输入第二个整数数字:11 12大于11 [root@rhel4 ~]# bash /server/scripts/day03.sh 请输入第一个整数数字:12 请输入第二个整数数字:12 12等于12
④上面的嵌套语句看起来很繁华,所以if同时还支持多分支语句
多分支语句:多个判断条件多个输出结果(满足哪个个判断条件、就执行哪个语句)
if 条件判断表达式1
then
语句1
elif 条件判断表达式2
then
语句2
elif 判断N....
then
语句N...
else
语句
fi
例如:
vim /server/scripts/day03.sh #!/bin/bash read -p "请输入第一个整数数字:" num1 ##接受用户输入的第一个变量,赋值给变量num1 read -p "请输入第二个整数数字:" num2 ##接受用户输入的第二个变量,赋值给变量num2 if [ $num1 -gt $num2 ] ##判断变量num1大于变量num2,是否为真 then echo "${num1}大于${num2}" elif [ ${num1} -eq ${num2} ] ##判断变量num1等于变量num2,是否为真 then echo "${num1}等于${num2}" else ##上面所有的判断都不成立,执行else语句,一般放在最后 echo "${num1}小于${num2}" fi
执行:
[root@rhel4 ~]# bash /server/scripts/day03.sh 请输入第一个整数数字:11 请输入第二个整数数字:12 11小于12 [root@rhel4 ~]# bash /server/scripts/day03.sh 请输入第一个整数数字:12 请输入第二个整数数字:11 12大于11 [root@rhel4 ~]# bash /server/scripts/day03.sh 请输入第一个整数数字:12 请输入第二个整数数字:12 12等于12
总结:
一般使用的都是双分支结构。
一般判断上条shell命令的执行结果作为条件判断表达式。即 [ $? -eq 0 ]