shell中的流程控制语句和其他语言中的差不多,大概就是if-else、case ... esac(与其他语言中的 switch ... case 语句类似)
一:if-else
测试这部分,就不在控制台里边输出了,这里代码要分行,在控制台中输出不方便。
1:单分支判断:
我们直接在shell文件she.sh中键入以下内容:
#! /bin/bash
if [ $1 = guanchao.site ]
then
echo 欢迎进入时间里的博客
fi
执行she.sh文件。
[root@VM_0_4_centos test]# ./she.sh
./she.sh: line 2: [: =: unary operator expected
为什么报错呢?因为shell文件中需要一个参数,然而我们在执行文件的时候并没有传递这个参数,因此报错了。
那么我们应该如何来规避这个问题呢?
很简单,我们需要将she.sh文件中的代码进行修改一下:
#! /bin/bash
# 我们使用引号将变量$1括起来,外边拼接了一个字符x,这样,如果没有传入变量,就会有一个x来作为垫底。当然,我们在括号的另一端也需要拼接上一个x,要不然,两个字符串这辈子不会相等的。
#! /bin/bash
# 注意这里包裹变量的一定是双引号。
if [ "$1"x = 'guanchao.site'x ]
then
echo 欢迎进入时间里的博客
fi
执行she.sh文件。
[root@VM_0_4_centos test]# ./she.sh guanchao.site
欢迎进入时间里的博客
到这里,单条件判断我们就搞定了,那如果是多条件,该怎么写呢?这里就需要用到我们之前看到的逻辑运算符了。我们在she.sh文件中键入以下内容:
#! /bin/bash
if [ "$1"x = 'guanchao.site'x ] && [ "$2"x == 'guanchao.com'x ]
then
echo 欢迎进入时间里的博客
else
echo 地址好像不太对啊
fi
执行she.sh文件,输出:
[root@VM_0_4_centos test]# ./she.sh guanchao.site
地址好像不太对啊
OK,单分支的判断先走到这里。
2:多分支判断:
我们在she.sh文件中键入以下内容:
#! /bin/bash
if [ "$1"0 -lt 180 ]
then
echo 未成年
elif [ "$1"0 -gt 180 ] && [ "$1"0 -lt 400 ]
then
echo 青年人
else
echo 中年人
fi
在上方代码中,我们在变量$1后边拼接了一个0,原理跟上边是一样的,防止未传变量而导致报错。
执行一下she.sh,输出:
[root@VM_0_4_centos test]# ./she.sh 16
未成年
[root@VM_0_4_centos test]# ./she.sh 18
中年人
[root@VM_0_4_centos test]# ./she.sh 20
青年人
[root@VM_0_4_centos test]# ./she.sh 50
中年人
我们看到,当我们输入18的时候,程序为我们输出18,为什么呢?看了一下,是我们上方的程序的边界判断有问题。修改一下:
#! /bin/bash
if [ "$1"0 -lt 180 ]
then
echo 未成年
elif [ "$1"0 -ge 180 ] && [ "$1"0 -le 400 ]
then
echo 青年人
else
echo 中年人
fi
再次执行she.sh:
[root@VM_0_4_centos test]# ./she.sh 18
青年人
以上大概就是if-else的基本使用
二:case ... esac
与其他语言中的 switch ... case 语句类似的分支语句。
这里首先介绍一下他的语法,这里很重要,他的语法多少有点怪。
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
注意双分号:;; 这里代表的意思是其他语言中的break,跳出分支。
每个 case 分支用右圆括号开始,;;结束
*) 代表其他语言中的default。
测试一下:
在she.sh文件中键入以下内容:
#! /bin/bash
case "$1"0 in
10) echo '你输入了1';;
20) echo '你输入了2';;
30) echo '你输入了3';;
*) echo '你输入了其他的数字'
esac
执行she.sh文件,输出一下内容:
[root@VM_0_4_centos test]# ./she.sh 1
你输入了1
[root@VM_0_4_centos test]# ./she.sh 2
你输入了2
[root@VM_0_4_centos test]# ./she.sh 3
你输入了3
[root@VM_0_4_centos test]# ./she.sh 4
你输入了其他的数字
以上大概就是 shell编程中流程控制语句的基本使用。
有好的建议,请在下方输入你的评论。