shell(六)流程控制

简介: shell中的流程控制语句和其他语言中的差不多,大概就是if-else、case ... esac(与其他语言中的 switch ... case 语句类似) 一:if-else测试这部分,就不在控制台里边输出了,这里代码要分行,在控制台中输出不方便。1:单分支判断:我们直接在shell文件she.sh中键入以下内容:bash复制代码#! /bin/bashif [ $1 = guanchao.site ]then echo 欢迎进入时间里的博客fi执行she.sh文件。

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编程中流程控制语句的基本使用。

有好的建议,请在下方输入你的评论。

目录
相关文章
|
5月前
|
Shell Windows Perl
Shell编程中的条件判断与流程控制
Shell编程中的条件判断与流程控制
79 0
|
5月前
|
Java 大数据 Shell
Shell基础学习---2、运算符、条件判断、流程控制(第一天学习)
大数据开发学习 Shell基础学习---2、运算符、条件判断、流程控制
|
12月前
|
Shell Linux
|
2月前
|
Shell
Shell基础知识(三)——流程判断
Shell基础知识(三)——流程判断
34 3
|
5月前
|
Shell 程序员 数据安全/隐私保护
shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)
shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)
|
5月前
|
运维 Shell Linux
第四章 Shell流程控制
第四章 Shell流程控制
|
5月前
|
监控 Shell 持续交付
通过Shell脚本实现局域网管理软件的自动化部署流程
本文介绍了如何使用Shell脚本自动化局域网软件部署流程,以简化管理和提高效率。脚本包括定义安装目录、服务器列表和软件包,然后遍历服务器进行传输和解压。此外,还展示了通过Shell脚本监控网络设备和软件状态,并自动将监控数据提交到网站的功能,有助于及时发现和解决问题,提升系统稳定性。通过这种方式,可有效减轻管理员的工作负担,降低成本。
150 0
|
5月前
|
监控 Shell 持续交付
利用Shell脚本自动化员工电脑监管软件的部署流程
在企业管理中,对员工的电脑活动进行监管是一项重要任务。而为了实现这一目标,部署监管软件是必不可少的。本文将介绍如何利用Shell脚本来自动化部署员工电脑监管软件的流程。我们将演示如何使用Shell脚本来自动下载、安装和配置监管软件,并且在部署完成后自动启动服务。
207 4
|
5月前
|
Shell
Shell流程控制
Shell流程控制
33 3
|
5月前
|
Java Shell Linux
Linux下的Shell基础——流程控制(三)
Linux下的Shell基础——流程控制(三)
63 0
Linux下的Shell基础——流程控制(三)