Shell脚本应用(if语句的结构)

Stella981
• 阅读 546

1、测试:检测表达式是否成立,成立则返回值为0,否则为非0

方法:

1)test  表达式

2)【 表达式 】

2、文件测试:

-d:是否为目录

-f:是否为文件

-e:是否存在

-r:是否有读取权限

-w:是否有写入权限

-x:是否有执行权限

3、整数值比较:

-eq:等于

-ne:不等于

-gt:大于

-lt:小于

-ge:大于等于

-le:小于等于

4、字符串比较:

=:字符串内容相同

!=:字符串内容不相同

-z:字符串内容为空

5、逻辑测试:

-a或&&:而且,两个条件同时满足才为真,前面的命令执行成功才执行后面的命令

-o或||:或者,一个条件成立即为真

!:否,条件不满足时为真

6、if语句:条件判断语句,成立则执行,否则推出或进行下一个判断,最多执行一次命令

1)单分支:判断一次,成立执行,不成立退出

If 【 条件表达式 】

then

命令

fi

2)双分支:判断一次,成立执行一条命令,不成立执行另一条命令

If 【 条件表达式 】

then

命令1

Else

命令2

fi

3)多分支:判断多次,依次执行

If 【 条件表达式 】

then

命令1

elif 【 条件表达式 】

then

命令2

else 【 条件表达式 】

then

命令3

fi

一、条件测试操作

1****、文件测试

(1)测试目录/media是否为目录,$?返回值为0,表示存在此目录。

Shell脚本应用(if语句的结构)

如果$?返回值非0,表示不存在此目录

 Shell脚本应用(if语句的结构)

(2)测试目录是否存在,输出结果更加直观。

输出“yes”表示该目录存在

Shell脚本应用(if语句的结构)

无“yes”输出表示该目录不存在

 Shell脚本应用(if语句的结构)

2、整数值比较

(1)判断当前已登录的用户数,当超过5个时输出“too many”。

 Shell脚本应用(if语句的结构)

没有出现“too many”说明没有超过5个。

(2)判断当前可用的空闲内存(buffers/cache)大小,当低于2048MB输出具体数值。

Shell脚本应用(if语句的结构)

3、字符串比较

用户输入“yes”或“no”来确认某个任务

Shell脚本应用(if语句的结构)

4、逻辑测试

判断当前linux系统的内核版本是否大于2.4。

查看内核

Shell脚本应用(if语句的结构)

判断

Shell脚本应用(if语句的结构)

二、if****条件语句

1、单分支if语句

(1)判断挂载点目录,若不存在则自动创建

步骤:首先创建脚本vim  chkmountdir.sh 编辑脚本,赋予x权限并执行(详细脚本如下图)

Shell脚本应用(if语句的结构)

执行并查看

 Shell脚本应用(if语句的结构)

(2)判断当前用户是否为root,如果不是则报错并执行“exit  1”退出脚本,不再执行其他代码。

步骤:编辑一个脚本 vim /opt/chkifroot.sh并切换用户验证

Shell脚本应用(if语句的结构)

创建并切换用户验证

 Shell脚本应用(if语句的结构)

2、双分支if语句

(1)判断目标主机是否存活,显示检测结果

步骤:创建脚本 vim pinghost.sh

Shell脚本应用(if语句的结构)

赋予x权限并验证,注:本机地址是192.168.1.10

 Shell脚本应用(if语句的结构)

(2)检查vsftpd服务是否运行,若运行则列出监听地址,PID号;否则输出提示“警告,vsftpd服务不可用1”。(插入linux系统安装光盘,安装一下vsftpd软件包)。

启动vsftpd服务(service  vsftpd start),运行一下脚本,查看结果。

停止vsftpd服务(service  vsftpd  stop),运行一下脚本,查看结果。

步骤:编写脚本 vim chkftpd.sh 并且要安装vsftpd服务

Shell脚本应用(if语句的结构)

赋予x权限并验证

 Shell脚本应用(if语句的结构)

3、多分支if语句

(1)根据输入的考试分数不同来区分优秀,合格,不合格三挡。

步骤:编写脚本 vim gradediv.sh

Shell脚本应用(if语句的结构)

赋予x权限并执行

Shell脚本应用(if语句的结构)

文章参考微信公众号:L宝宝聊IT

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java中比较两个时间的差值
项目背景1.某篇文稿的发布时间是publishDate,例如:2020072118:00:41。2.现要求判断该篇文稿的发布时间是否在近30天之内。publicstaticlongdayDiff(DatecurrentDate,DatepublishDate){LongcurrentTimecurrentDat
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
Laravel 控制器的request
publicfunctionrequest1(Request$request){//取值$nameRequest::input('name');//是否有值if($requesthas('name')){echo$requestinput('name');}$res
Stella981 Stella981
3年前
Linux Shell编程 test命令
概述test命令是Shell脚本中用来进行条件判断的。test命令示例按照文件类型进行判断测试选项作用\b文件判断该文件是否存在,并且是否为块设备文件(是块设备文件为真)\c文件判断该文件是否存在,并且是否为字符设备文件(是字符设备文件为真)\d文件判断该文件是否存
Wesley13 Wesley13
3年前
PHP中的NOW()函数
是否有一个PHP函数以与MySQL函数NOW()相同的格式返回日期和时间?我知道如何使用date()做到这一点,但是我问是否有一个仅用于此的函数。例如,返回:2009120100:00:001楼使用此功能:functiongetDatetimeNow(){
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
达里尔 达里尔
1年前
给数组添加新数据,判断数据是否重复
多选要进行数组拼接,希望判断往原数组里添的新数据是否重复,封装个简易方法languageconstdataArrayname:'aaa',id:1,name:'bbb',id:2;constnewDataname:'ccc',id:2;//要添加的新数