Shell脚本应用(2

条件测试操作:

使用test命令操作

格式:test 条件表达式

或者:

条件表达式 ]//注意,左右两边至少得有一个空格

1.文件测试

-d:测试是否为目录

-e:是否存在

-f:是否为文件

-r:测试当前用户是否有读取权限

-w:测试当前用户是否有写入权限

-x:测试是否设置有可执行权限

例:测试目录是否存在,$?返回来的值为0表示正常,非0表示命令不正常

081619475.jpg

为了更直观的查看测试结果,可以结合命令分隔符“&&”和echo命令一起使用,当命令成立时直接输入“yes”。”&&”表示而且的意思

:

081619787.jpg  //如果目录存在,将会输出yes

081619834.jpg    //如果目录不存在,将不会输出

2.整数值比较

-eq:等于

-ne:不等于

-le:小于或等于

-ge:大于或等于

-gt:大于

-lt:小于

例如:

若要判断当前可用的空闲内存大小,当低于1024MB时输出具体数值,可以执行以下操作。其中“free –m”命令表示以MB为单位输出内存信息,提取的空闲内存数值通过命令替换赋值给变量cache

081619153.jpg

或者:

081619675.jpg

3.字符串比较

=:第一个字符串与第二个字符串相同

!=:第一个字符串与第二个字符串不相同,其中“!”为取反的意思

-z:检查字符串是否为空。对于未定义的值将视为空串

扩展一下:>1.txt可以清空1.txt里的内容,如果没有则可以创建1.txt文件

例:

081620282.jpg

例如:若要判断当前系统的语言环境,当发现不是“en.us”时输出信息

081906239.png

 

4.逻辑测试

逻辑测试指的是判断两个或多个条件之间的依赖关系。

&&逻辑与,表示而且的意思。只有当前后两个条件都成立时,返回的值才为0、使用test命令测试时,&&可改写为–a

||逻辑或:表示或者,只要前后两个条件有一个成立时,整个测试命令的返回值为0.使用test测试命令,可将||改写为-o

!逻辑否,表示不的意思,只有当指定的条件不成立时,整个测试命令的返回值才为0

例如:若要判断当前linux系统的内核版本是否大于2.4。可以执行以下操作

 

081622891.jpg

使用if条件语句

1单分支的if结构

if语句的分支指的是不同测试结果所对应的执行语句(一条或多条)。对于单分支来说,只有在条件成立时才会执行相应的代码。否则不做任何操作。语法格式如下:

if 条件测试操作

then 

命令序列

fi

2.双分支的if结构

对于双分支的选择结构来说,要求针对“条件成立”“条件不成立“两种情况针对不同的操作,双分支的语法如下:

if 条件测试语句

then 

命令序列1

else

命令序列2

fi

双分支if结构的执行流程:首先判断条件测试操作的结果,如果条件成立,则执行then后面的命令,忽略else及后面的命令序列2,直到if结束判断,如果条件不成立,则忽略then及后面的命令序列1,直接跳至else后面的命令序列2执行。直到if结束判断

3.多分支的if语句

由于if语句可以根据测试结果的成立,不成立分别执行操作,所以能够嵌套使用,进行多次判断。语法使用“

if 条件测试操作1

then

命令序列1

elif 条件测试操作2

then

命令序列2

else 

命令序列 3

fi

多分支的if结构的执行流程:首先判断条件测试操作1的结果,如果条件1成立,则执行命令序列1,然后跳至if结束判断。如果条件1不成立,则继续判断条件测试操作2的结果,如果条件测试2成立,则执行命令序列2,然后跳至if结束判断….如果所有的条件都不满足,则执行else后面的命令序列n,直到遇见fi结束判断

1.单分支if语句应用

例题:

很多linux用户习惯上将光盘挂载到/media/cdrom下,但是linux 5.5系统默认没有建立此目录,若需要在shell脚本中执行挂载光盘的操作,默认先判断挂载点目录是否存在,若不存则新建此目录

081623311.jpg

或者

081624509.jpg

在例如:在linux下有很多命令普通用户不能直接执行,这个是直接测试当前登录的用户是否为root用户的

081625637.jpg

2.双分支if语句应用

双分支if语句只是在单分支的基础上针对“条件不成立“的情况执行另一种操作,而不是”坐视不管“的不做任何操作。

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

081627799.jpg

//在上述脚本代码中,为了提高ping命令的测试效率,使用了-c -I -w选项分别指定只发送三个测试包。间隔0.2s,超时时间为3s、另外/dev/null相当于一个回收站。不会回显任何信息。

在例如,通过shell脚本检查vsftpd服务是否运行,如果已经运行则输出它的PId号,和监听地址,否则输出提示:警告,vsftpd服务器不可用

081630726.jpg

 

081631262.jpg

关闭vsftpd服务

081632964.jpg

3.多分支if语句应用

例如。若要编写一个成绩分档的脚本、study.sh。根据输入的考试成绩,来判断合格还是不合格

081636290.jpg

验证:

081638144.jpg

ok