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这个命令,这样就把该服务设置为开机自启了。