02 Shell编程之条件语句(补充实验部分)

1、双分支if语句的补充(实验部分)

例如,要编写一个连通性测试脚本,通过位置参数来提供目标主机地址,然后根据ping检测结果给出相应的提示

(能ping通的,回馈一个信息:该服务器是开启的;如果不能ping通的,回馈另一个信息:该服务器是down掉了)

注:去测连通性的时候,用脚本的方式是最方便的。

具体操作如下:

先用vim编辑器打开一个空文件,如下图:

然后在该文件里编写脚本,按照如下图所示的编写:

写完之后,保存退出vim编辑器。

然后可以测试一下该脚本文件,如下图:

显示192.168.2.149这个服务器是UP开着的。

所以到此就实现了用一个脚本去实现ping服务器连通性的结果。

2、多分支if语句的补充(实验部分)

例如,要求用多分支语句判断考试成绩的优良状态,把考试成绩分为:

优秀(>=80分,且<=100分)、合格(>=60分,且<80分)、不合格(>=0分,且<60分)

补充:read命令——用来提示用户输入信息(通常结合-p选项来使用)

先用vim编辑器打开一个空文件,如下图所示:

然后在文件里按下图所示的编写脚本,编写完成之后再退出vim编辑器:

然后就可以去测试一下该脚本的正确性了,如下图:

经上述测试,该脚本是可以正常运行的。

但是问题出现在,如果输入一个大于100的数字,会提示成绩不合格的字样。如下图:

那这种情况如何改善呢?

把脚本打开,在if后面再加一个elif判断即可。如下图:

先打开脚本ccc.sh:

然后在里面修改一下内容,如下图:

然后保存退出,再测试一下:

经测试,这样脚本就可以正常符合要求了。

多分支if语句,在编写的时候要注意严谨性。但是如果当要判断的条件太多的时候,再用if语句就会显得很复杂了。

3、case分支语句

case语句可以使脚本程序的结构更加清晰、层次分明。

case语句从某种意义上说,可以替换if语句。

3.1 case语句的结构

case语句主要用于:当某个变量存在多种取值,需要对其中的每一种取值分别执行不同

的命令序列。

注:这种情况与多分支的if语句非常相似,只不过if语句需要判断多个不同的条件,而case语句只是判断一个变量的不同取值。

case分支语句的语法结构如下图:

上图中,关键字case后面跟的是变量值——即$变量名。

整个分支结构包括在case......esac之间,中间的模式1、模式2、......*分别对应变量的不同取值(程序期望的取值)

注:*作为通配符,可匹配任意值。

case语句的执行流程:

首先使用“变量值”与模式1进行比较,

若取值相同,则执行模式1后面的命令序列,直到遇见双分号;;后跳转至esac——表示分支结束;

若与模式1不相匹配,则继续与模式2进行比较,若取值相同,则执行模式2后面的命令序列,直到遇见双分号;;后跳转至esac——表示分支结束;

.........以此类推;

若找不到任何匹配的值,则执行默认模式*)后的命令序列,直到遇见esac后结束分支。

如下图:

注:使用case分支语句时:

  • case行尾必须为单词in,每一个模式必须以右括号)结束;
  • 双分号;;——表示命令序列的结束;
  • 模式字符串中,可以用方括号表示一个连续的范围,如[0-9]

还可以用竖杠符号|表示或,如A|B

  • 最后的*)表示默认模式,其中的*相当于通配符

3.2 case语句的应用

3.2.1 检查用户输入的字符类型

要求:提示用户从键盘输入一个字符,通过case语句来判断该字符是否为字母、数字或者其他控制字符,并给出相应的提示信息。

如下图所示,先用vim编辑器打开一个空脚本文件ddd.sh,如下图所示:

然后在vim编辑器里,按照下图中所示进行编写脚本:

编写完成后保存并退出vim编辑器,然后用bash ddd.sh命令来测试一下:

经测试,编写的脚本满足了上述的要求。

3.2.2 编写系统服务脚本

利用脚本去重启、停止、启动进程或查询进程的状态。

要求:通过位置变量$1指定的start、stop、restart、satatus控制参数,分别用来启动、停止、重启sleep进程,以及查看sleep进程的状态。

补充:sleep——休眠程序,执行sleep 5命令会在执行界面卡5秒钟。如下图:

在sleep +X秒 +&,这个命令表示sleep程序在后台运行的。

先用vim编辑器打开一个空的脚本文件eee.sh,如下图:

然后在vim编辑器里按照下面的图片中所示,编写脚本:

然后保存并退出vim编辑器,下面来测试一下脚本的功能是否能正常实现:

而当测试restart命令的时候,有两种实现的方式:

第一种是使用bash的命令来测试该脚本,如下图:

第二种是使用绝对路径./的方式来测试,如下图:

补充:脚本在运行的时候,一定要把该脚本的绝对路径给加上去,如下图:

因为在脚本中:

所以如果执行该脚本的时候加上绝对路径后,就相当于:

拓展部分:

一、把服务添加为系统服务

在Linux中,控制服务通常有两种方式:

(1)systemctl stop/start/restart+服务名

(2)sudo service +服务名+start/restart/stop/status

在上面所用到的eee.sh脚本文件里做一些修改,如下图:

先用vim编辑器打开编写过的eee.sh文件,如下图:

然后在打开的脚本文件里添加下图中圈出的两行内容:

添加完成之后,保存并退出vim编辑器。然后执行下图中得命令:

要提前把脚本文件eee.sh拷贝到/etc/init.d目录下,才可以执行上面的那个chkconfig --add eee.sh命令。因为只有把脚本文件拷贝到这里,该脚本文件下对应的服务才有可能成为系统服务。

如下图:

注:chkconfig --add eee.sh命令的作用是将你的脚本文件eee.sh所对应的服务,添加为系统服务。

拷贝过来之后,可以再执行一次上面的chkconfig --add eee.sh命令。

然后,就可以用service命令进行测试了,如下图:

测试正常,说明脚本文件eee.sh所对应的服务已经被添加为系统服务了。而且在执行测试的时候也不需要在查找输入该脚本的绝对路径了,直接就可以执行。

注:这时候的eee.sh已经不再是一个脚本了,它已经变成了你系统中的一个服务了。

补充:如何把一个服务设置为开机自启呢?

用chkconfig + eee.sh +on这个命令,这样就把该服务设置为开机自启了。

  • 46
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值