首页 > 系统相关 >Shell脚本:条件语句(if、case)

Shell脚本:条件语句(if、case)

时间:2024-06-22 14:28:25浏览次数:23  
标签:case 语句 Shell 脚本 文件 示例 判断 操作步骤

目录

硬编码

硬编码的缺点

条件判断

$?

命令行语句

判断指定目录是否存在

判断指定文件是否存在

判断指定对象是否存在

表达式形式语句

判断对象是否存在

判断对象是否有权限

与、或、非 运算

与运算

或运算

非运算

比较大小

判断磁盘利用率实验步骤

字符串比较

逻辑表达式

if 语句

单分支结构

语法格式

语句原理

单分支if语句示例操作步骤

双分支结构

语法格式

语句原理

连通性测试实例操作步骤

多分支结构

语法格式

语句原理

多分支if语句示例操作步骤

case语句

语法格式

语句原理

case语句示例操作步骤

模拟sleep服务实例操作步骤

注册为系统服务调用脚本

服务管理方式

systemctl

service


硬编码

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

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

硬编码的缺点

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

条件判断

$?

检查上一个指令执行的结果状态

echo $?

如果状态正常就返回0

如果状态不正常就显示非0

命令行语句

判断指定目录是否存在

使用 test -d 目录路径 来判断指定目录是否存在

并使用echo $? 命令检测命令执行状态,非0表示不正常

判断指定文件是否存在

test -f 文件路径 判断文件是否存在

判断指定对象是否存在

表达式形式语句

判断对象是否存在

判断对象是否有权限

  • -r:读权限
  • -w:写权限
  • -x:执行权限

与、或、非 运算

逻辑运算符

与运算

当前一个条件成立时,执行命令

示例:[ $USER = root ] && echo "当前用户为root"

解析:当用户为root时,在终端上输出“当前用户为root”

或运算

只要有一方的条件满足,就执行命令

如果两个文件只有file1存在那么结果为真(true),如果两个文件只有file2存在结果为真(true)

如果两个文件都不存在,结果为假(false)

if [ -f "$file1" ] || [ -f "$file2" ]; then
    echo "文件存在!"
else
    echo "文件不存在!"
fi
非运算

非运算会将 true 变为 false,将 false 变为 true

示例:[ ! -d /opt/test.txt ] && echo "该文件不是目录"

解析:如果指定的文件 不是目录,就在终端显示“该文件不是目录”

配合 = 就是 !=:不等于

示例:[ $USER != root ] && echo "当前用户不为root"

比较大小

运算符

说明

eq

等于(equal)

ne

不等于(not equal)

gt

大于(greater)

ge

大于等于(greater or equal)

lt

小于(less)

le

小于等于(less or equal)

判断磁盘利用率实验步骤

通过 df 命令 并使用 grep 管道符和 awk 获取根分区行内容的利用率的一列

再添加一个管道符 指定%为分隔符 结果只剩下利用率的数字

再将该命令的结果赋值给一个变量,接下来就可以做判断的操作了

通过表达式实现判断,可以看到结果是否,那么我们就可以通过判断的结果使用 if 语句来

字符串比较

使用表达式判断

需要注意的是,语法格式是有要求的

逻辑表达式
  • &&(与运算):条件1 && 条件2
    • 如果条件1执行成功,也执行条件2

if 语句

if:如果

如果判断的条件成立,就执行指定的命令

单分支结构

语法格式

语句原理

单分支if语句示例操作步骤

cd 到 /opt 目录下创建一个脚本文件

文件内容如下

新建一个用户并设置密码,然后登录该用户

使用tom的身份执行此脚本就成立了我们指定的条件(不是root用户),状态码也指定为了100

并且后续的 ls /opt命令没有执行,因为前一条语句没有执行成功

双分支结构

语法格式

语句原理

连通性测试实例操作步骤

新建编辑一个脚本文件

写入内容如下

指定ping命令的请求次数、间隔时间、超时时间,和添加位置参数

/dev/null 是“黑洞文件”,作用是任何写入到该文件的数据都会被丢弃,在当前脚本下的作用是丢弃标准输出和错误的输出信息,效果是不会在终端显示

测试执行该脚本,得到结果如下

如果在巡检时有上百上千台机器需要做连通性测试呢?

就可以编辑一个 主机列表 把所有主机的IP地址写进去,再将该列表引用到脚本里,让脚本通过该列表获取每个IP地址,逐个测试,实现自动化

多分支结构

语法格式

语句原理

多分支if语句示例操作步骤

新建编辑脚本文件,输入以下内容

保存并退出,测试该脚本

case语句

case:情况

语法格式

语句原理

case语句示例操作步骤

新建编辑脚本文件并写入以下内容

或通过 |(或运算),两个范围同时判断

模拟sleep服务实例操作步骤

新建编辑脚本文件输入以下内容

增加执行权限

需要注意的是使用相对路径时,在执行脚本内部的$0命令会找不到test03脚本文件,因为 $0 仅包含脚本名而不包含脚本文件的路径

而使用绝对路径调用时,$0就包含了调用文件时输入的绝对路径,所以在执行脚本内部的$0命令时就能找得到脚本文件了

注册为系统服务调用脚本

修改脚本文件,增加必须的规则(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)

标签:case,语句,Shell,脚本,文件,示例,判断,操作步骤
From: https://blog.csdn.net/m0_65551023/article/details/139864889

相关文章

  • 01 Shell编程规范与变量
    1、Shell脚本概述在一些复杂的Linux维护工作中,大量的重复性的输入和交互操作不仅费力费时,而且容易出错,而编写一个恰到好处的Shell脚本程序,可以批量处理、自动化地完成一系列维护任务,大大减轻管理员的负担。Shell脚本是什么?简单的说,只要将平时使用的各种Linux命令按顺序保存......
  • 02 Shell编程之条件语句
    1、条件测试操作要使Shell脚本程序具备一定的智能,面临的第一个问题就是如何区分不同的情况以确定执行何种操作。例如,当磁盘使用率超过95%时,发送告警信息;当备份目录不存在时,能够自动创建;当源码编译程序时,若配置失败则不再继续安装等。注:Shell环境根据命令执行后的返回状态值......
  • Shell 编程之条件语句
    2.1条件测试操作Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0时表示成功,否则(非0值)表示失败或异常。使用专门的测试工具——test命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为0表示条件成立)。使用test测试命令时,包......
  • 【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(三)-shell语法
    主要通过讲解shell中的一些基本语法,可以当作日常的笔记来进行查询和记忆。文章目录前言一、shell二、shell语法1.运行方式2.注释3.变量4.默认变量 5.数组 总结前言主要通过讲解shell中的一些基本语法,可以当作日常的笔记来进行查询和记忆。提示:以下是本篇......
  • 01、Shell 编程规范与变量
    目录1.1Shell脚本概述1.1.1Shell的作用        1.1.2编写第一个Shell脚本        1.1.3重定向与管道操作1.重定向操作2.管道操作1.2Shell变量的作用、类型1.2.1自定义变量1.定义新的变量2.查看和引用变量的值3.变量赋值的特殊操作4.设置变......
  • 【Shell脚本】 Shell索引数组变量:定义-获取-拼接-删除、alisa内置命令、默认输出换行
    目录 Shell索引数组变量:定义-获取-拼接-删除 数组的获取 数组的拼接数组的删除 alisa内置命令默认输出换行语法 read内置命令 declare内置命令获取指定key的值使用declare定义一普通数组,并获取打印元素数据的值 expr命令 算术运算符 布尔运算符 逻辑......
  • webshell总结
    一、webshell概况1.webshell概念:经常有客户的网站碰到被上传小马和大马,这里的“马”是木马的意思,可不是真实的马。通常,攻击者利用文件上传漏洞,上传一个可执行并且能被解析的脚本文件,通过这个脚本来获得服务器端执行命令的能力,也就是我们经常听到的WebShell,而这个脚本文件就......
  • SQL新手蜕变:掌握这20条常用SQL语句,让你也能成为高手!
    序言在现代软件开发中,SQL(StructuredQueryLanguage,结构化查询语言)作为与数据库交互的标准编程语言,是每个开发者必学的基础技能。掌握SQL并在数据库管理与数据分析中应用自如,能显著提升开发效率和数据挖掘能力。本文将带你从零基础小白成长为数据库操作高手,经历蜕变所需的......
  • shell grep教程
    grep(globalregularexpression)命令用于查找文件里符合条件的字符串或正则表达式。grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为......
  • Windows的Gitlab Runner搭配的PowerShell脚本:自动下载Directory.Build.props相关文件
    简介GitlabRunner在Windows上运行之后,我们在.gitlab-ci.yml中编写script语句,思路和Linux是一样。但是考虑到Windows的特点,为了让程序员少接触一些知识点,以及给未来执行作业的时候预留更多的操作空间。简单说就是未来修改执行作业时候的逻辑,但是每个软件仓库根目录下的.gitlab-ci......