shell脚本之if语句

一、条件测试

1、1 返回码 $?

$? :返回码,用来判断命令或者脚本是否执行成功。

0 :表示true ,成功;非0 则表示flase ,失败。

1、2 test命令

可以进行条件测试,然后根据返回值来判断条件是否成立

-e :exist,测试目录或者目录是否存在

-d :directory,测试目录是否存在

-f :file,测试普通文件是否存在

-r :read,测试当前用户是否对文件/目录有读权限

-w :write,测试写权限

-x :execution,测试执行权限

1、3 比较符

1.3.1 整数比较

-eq:等于,equal

-ne:不等于,not equal

-gt:大于,greater than

-lt:小于,less than

-ge:大于等于,gteq

-le:小于等于,lteq

1.3.2 类C语言的整数比较

==:等于,既可以比较数字,也可以比较字符串

!=:不等于

>:大于

<:小于

>=:大于等于

<=:小于等于

这种比较符一般用于比较变量或者字符串。

1.3.3 比较符格式

[ ] :注意格式,所有参数和符号都要以空格隔开

[[ ]] :可以使用更高级的模式,可以使用正则表达式。而且,在双中括号中使用字符串的时候可以不加引号,而不用担心引起歧义。

(( )) :只能使用算数比较符

1.3.4 逻辑与和逻辑或

与:&&,或者-a,条件都满足才成立

或:||,或者-o,满足一个条件即成立

注意:-a 和 -o 只能在 [ ]中使用,[[ ]]中或者两个[ ]之间只能用&& ||

二、if 语句

2.1 if语句的基本组成
  • if :后面是条件测试语句
  • then :后面跟命令序列,只有条件测试语句成立,才会执行then的命令模块
  • elif:后面也是条件测试语句,用于多分支结构
  • else:后面跟命令序列,所有的条件测试语句均不满足时,执行else的命令模块
  • fi :结束语句

2.2 单分支结构

在 /opt 目录下创建test1.sh

2.2 双分支结构

在 /opt 目录下创建test2.sh

2.3 多分支结构

在 /opt 目录下创建test3

2.4 嵌套 if 结构

需求:检查用户家目录中的test.sh 文件是否存在,并且检查是否有执行权限

在 /opt 目录下创建test4.sh

三、case语句

case相当于 if 多分支结构,格式如下:

:要求:用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录,分别使用tar -zxvftar -jxvf

用 case语句实现2.3 的列子,如下所示:

四、shell练习

需求1
通过位置变量传参的方式,给脚本内部传一个ip地址

用if判断主机是否存活,若存活提示用户ip is online,而且要保存到/opt/hosts.txt文件,若主机无连接,提示用户 ip is offline

使用ping -c 5 检测连通性,但不显示ping的过程
 

需求2

提示用户输入内容,使用if 语句判断输入的内容是否为整数。判断范围0-100。然后再判断输入的内容是奇数还是偶数。

提示:判断输入的内容是否为整数,可以用 if [ $num -eq $num ] &> /dev/null ,-eq是整数比较符,如果变量不是整数,比如小数或者字符串会报错,并跳转到else执行,把报错信息重定向到/dev/null就不会在终端显示多余的信息。

对检验奇数偶数的解释: $(($num%2)),对变量除以2取余数,余数为0则为偶数,余数为1则为奇数。

需求3
提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,
大于10秒的都淘汰,
如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别。
男生进男生组,女生进女生组,如果输入错误请提示错误(整数判断,小数判断。)

test3.sh:只允许输入整数
 

如果要实现小数判断,可以用bc实现,比如:result=$(echo "$num1 > $num2" | bc) 。把两个小数变量比较的结果保存到result中,再用if语句对result进行判断

需求4

用case语句控制 firewalld start|stop|restart|status 来管理firewalld服务,要求如果命令选项不对,则提示输入不正确:{start|stop|status|restart}
test4.sh:用传参的方式

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 17:36:04       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 17:36:04       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 17:36:04       4 阅读
  4. Python语言-面向对象

    2024-07-10 17:36:04       5 阅读

热门阅读

  1. 关于TCP的三次握手流程

    2024-07-10 17:36:04       12 阅读
  2. stm32毫秒ms延时,HAL_Delay()

    2024-07-10 17:36:04       10 阅读
  3. nftables(4)表达式(2)主要表达式(PRIMARY EXPRESSIONS)

    2024-07-10 17:36:04       9 阅读
  4. C++八股(三)之虚函数

    2024-07-10 17:36:04       11 阅读
  5. Linux下mysql数据库的导入与导出以及查看端口

    2024-07-10 17:36:04       11 阅读
  6. Mybatis-Flex各种查询,强烈建议收藏

    2024-07-10 17:36:04       13 阅读
  7. Mybatis-plus学习

    2024-07-10 17:36:04       8 阅读
  8. mysql函数 last_insert_id()

    2024-07-10 17:36:04       11 阅读
  9. DateTimeUtils

    2024-07-10 17:36:04       8 阅读