Shell编程之条件语句

目录

硬编码

硬编码的缺点

实验

文件测试

整数比较

if语句的结构

单分支结构

双分支结构

多分支结构

使用case分支语句sys

注册为系统服务调用脚本

服务管理方式


硬编码

硬编码(Hard Coding)是指在程序代码中直接使用固定值,而不是通过变量、配置文件或参数来动态获取这些值

比如在脚本中写入一个ping命令,目标的IP地址固定为192.168.10.101(直接嵌入常量或固定逻辑),这就是硬编码

硬编码的缺点
  1. 难以维护:当需要修改硬编码的值时,需要直接修改源代码,并重新编译、部署应用。这增加了出错的风险和维护成本。
  2. 缺乏灵活性:硬编码使得程序在不同环境中运行时缺乏灵活性。例如,开发环境和生产环境的配置可能不同,如果使用硬编码,就需要为每个环境分别修改代码。
  3. 可读性和可管理性差:随着项目规模的增大,硬编码会导致代码难以阅读和管理,特别是当这些值分散在多个文件和模块中时。

实验

文件测试

-d 选项用于检查指定的路径是否存在且为目录

这条命令检查 /aaa 是否存在且为目录。如果 /aaa 存在且是一个目录,则 test 命令返回退出状态码 0。如果 /aaa 不存在,或者存在但不是一个目录,则 test 命令返回退出状态码 1。

  • test -f /aaa 检查 /aaa 是否存在且为普通文件。
  • 退出状态码 1 表示 /aaa 不存在或者存在但不是一个普通文件。

  • test -e /aaa 检查 /aaa 是否存在。
  • 退出状态码 1 表示 /aaa 不存在。

  • [ -d /mnt ] 检查 /mnt 是否存在且为目录。
  • 退出状态码 0 表示 /mnt 存在且是一个目录。
  • [ 条件 ] 是 test 条件 的另一种语法形式。
  • 测试权限

整数比较

-eq:第一个数等于(Equal)第二个数。

-ne:第一个数不等于(Not Equal)第二个数。

-gt:第一个数大于(Greater Than)第二个数。

-lt:第一个数小于(Lesser Than)第二个数。

-le:第一个数小于或等于(Lesser or Equal)第二个数。

-ge:第一个数大于或等于(Greater or Equal)第二个数。

这个命令的输出 1% 表示根文件系统的利用率为1%。这意味着根文件系统当前使用的磁盘空间占总容量的1%。

if语句的结构

单分支结构

vim aaa.sh

bash aaa.sh查看语句

双分支结构

vim bbb.sh

  • -c 3:发送 3 个 ICMP 请求。
  • -i 0.2:每个请求之间间隔 0.2 秒。
  • -W 3:等待每个请求的响应时间为 3 秒。
  • $1:目标主机地址,由脚本运行时提供。
  • &>/dev/null:将命令的标准输出和标准错误重定向到 /dev/null,即不显示任何输出。

这里的 [ $? -eq 0 ] 是一个条件测试,用于检查前一个命令(即 ping 命令)的退出状态码:

  • $?:表示上一个命令的退出状态码。
  • -eq 0:检查退出状态码是否等于 0。

如果 ping 命令成功(即目标主机可达),退出状态码为 0,条件为真。

bash bbb.sh 192.168.2.149测试信息

多分支结构

vim ccc.sh

vim

bash ccc.sh测试

使用case分支语句sys

vim ddd.sh

bash ddd.sh测试运行结果

开启权限 chmod +x eee

注册为系统服务调用脚本

修改脚本文件,增加必须的规则(chkconfig)

35:开机自启的运行级别(3、5),也可以写为 "-" 表示所有运行级别

80:启动优先级(当系统启动时,开机自启的优先级,数字越大,优先级越低)

20:关闭优先级(关闭系统时,关闭服务的优先级)

再将文件拷贝到指定位置

在脚本中加入了chkconfig规则就可以通过chkconfig命令将脚本注册为系统服务

注册为系统服务后,就可以通过service命令对该服务进行操作

系统启动时自动运行该服务

服务管理方式

  • systemctl
    • 串行启动
    • 如果系统的守护进程是systemd,管理系统服务的就是 systemctl
      • systemctl start|stop|restart|reload|status|enable|disable httpd
      • systemctl 选项 服务名称
  • service
    • 并行启动
    • 如果系统的守护进程是init,管理系统服务的就是 service 管理(在CentOS 7往后,系统内的init是systemd的链接)
      • service httpd start|stop|restart|reload|status
      • service 服务名称 选项
    • 通过chkconfig 服务名 on 将该服务设为开机自启
    • 需要将脚本文件放置在 /etc/init.d/ 目录下
    • 该脚本需要有执行权(chmod +x)
  • 27
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值