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