if…then是最常见的条件判断式。简单地说,就是当符合某个条件判断的时候,就进行某项工作。if…then的判断还有多层次的情况,我们将分别介绍。
1.单层、简单条件判断式
如果只有一个判断式要进行,那么可以简单地这样做:
if [条件判断式]; then
当条件判断式成立时,可以进行的命令工作内容;
fi <==将if反过来写,就成为fi了,结束if之意
下面将sh06.sh这个脚本修改为if...then的样式:
[root@Server01 scripts]# cp sh06.sh sh06-2.sh <==这样改得比较快
[root@Server01 scripts]# vim sh06-2.sh
!/bin/bash
Program:
This program shows the user's choice
History:
2021/08/25 Bobby First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
read -p "Please input (Y/N): " yn
if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then
echo "OK, continue"
exit 0
fi
if [ "$yn" == "N" ] || [ "$yn" == "n" ]; then
echo "Oh, interrupt!"
exit 0
fi
echo "I don't know what your choice is" && exit 0
运行:
[root@Server01 scripts]# sh sh06-2.sh
2.多重、复杂条件判断式
在同一个数据的判断中,如果该数据需要进行多种不同的判断,那么应该怎么做呢?
可以使用:
多个条件判断 (if...elif...elif... else) 分多种不同情况运行
if [条件判断式一]; then
当条件判断式一成立时,可以进行的命令工作内容;
elif [条件判断式二]; then
当条件判断式二成立时,可以进行的命令工作内容;
else
当条件判断式一与二均不成立时,可以进行的命令工作内容;
fi
我们将sh06-2.sh改写成这样:
[root@Server01 scripts]# cp sh06-2.sh sh06-3.sh
[root@Server01 scripts]# vim sh06-3.sh
!/bin/bash
Program:
This program shows the user's choice
History:
2021/08/25 Bobby First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
read -p "Please input (Y/N): " yn
if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then
echo "OK, continue"
elif [ "$yn" == "N" ] || [ "$yn" == "n" ]; then
echo "Oh, interrupt!"
else
echo "I don't know what your choice is"
fi
运行:[root@Server01 scripts]# sh sh06-3.sh
如果你不希望用户由键盘输入额外的数据,那么就可以使用上一节提到的参数功能($1),让用户在执行命令时就将参数带进去。现在我们想让用户输入“hello”这个关键字时,利用参数的方法可以按照以下内容依序设计。
判断 $1是否为hello,如果是,就显示“Hello, how are you ?”。
如果没有加任何参数,就提示用户必须要使用的参数。
而如果加入的参数不是hello,就提醒用户仅能使用hello为参数。
整个程序是这样的:
[root@Server01 scripts]# vim sh09.sh
!/bin/bash
Program:
Check $1 is equal to "hello"
History:
2021/08/28 Bobby First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
if [ "$1" == "hello" ]; then
echo "Hello, how are you ?"
elif [ "$1" == "" ]; then
echo "You MUST input parameters, ex> {$0 someword}"
else
echo "The only parameter is 'hello', ex> {$0 hello}"
fi