Shell ❀ 条件判断语句

2023-05-16

文章目录

  • 四、条件判断
    • 1、if 单分支格式
      • 1.1 语法格式
      • 1.2 操作案例
    • 2、if-else 双分支格式
      • 2.1 语法格式
      • 2.2 操作案例
    • 3、if-elif-else 多分支结构
      • 3.1 语法格式
      • 3.2 操作案例
    • 4、( ) 和 { } 复合指令
      • 4.1 相同点
      • 4.2 不同点
    • 5、exit退出程序
    • 6、case 多条件判断语句
      • 6.1 语句格式
      • 6.2 操作案例

四、条件判断

常见的if条件语句分为三种:单分支、双分支、多分支;

1、if 单分支格式

1.1 语法格式

# if与then分隔
if <条件表达式>
then          #当条件满足表达式时,执行指令
    指令
fi

# if与then相连
if <条件表达式>;then
    指令
fi

1.2 操作案例

  1. 判断当前系统剩余内存大小,若低于100M,进行告警。
[root@localhost shell]#  cat freeMem.sh 
#!/bin/bash

freeMem=`free -m | grep -w Mem | tr -s " " | cut -d " " -f 4`
#反引号内容为执行指令,执行结果赋值给新对象freeMem

if [ $freeMem -le 100 ]
	then
		echo "内存已满,请及时清理!"   
  #当freeMem小于100时,执行echo语句
	else
		echo "内存充足!"
  #当freeMem大于或等于100时,执行echo语句              
fi

#提取内存大小其他简便方法(推荐使用sed与awk命令为shell编程语句提取数值)
[root@localhost ~]# free -m | awk '/Mem:/ {print $4}'
1614
  1. 判断当前脚本执行者,如果不是root用户,提示用户脚本需要root用户来执行。
[root@localhost shell]#  cat a3.sh 
#!/bin/bash

if [ $USER == "root" ];then
	echo "is root!"
else
	echo "not is root!"
fi

2、if-else 双分支格式

2.1 语法格式

if <条件表达式>
then          #当条件满足表达式时,执行指令1
	指令1     
else          #当条件不满足表达式时,执行指令2
	指令2
fi

2.2 操作案例

  1. 检查主机CPU是Intel还是AMD。
[root@localhost shell]#  cat a6.sh 
#!/bin/bash

vendor=`cat /proc/cpuinfo | grep vendor_id | uniq | tr -s " " | cut -d " " -f 2`
#uniq 去除重复出现的行
#tr -s 字符串去重,只保留第一个重复字符

if [[ $vendor=="Genuinelnmtel" ]];then
	echo "is intel!"
elif [[ $vendor=="AuthenticAMD" ]];then
	echo "is AMD!"
else
	echo "is other!"
fi

3、if-elif-else 多分支结构

3.1 语法格式

if <条件表达式1>
then          #当条件满足表达式1时,执行指令1
    指令1
elif <条件表达式2>
then          #当条件满足表达式2时,执行指令2
    指令2
else          #当条件不满足表达式1与2时,执行指令3
    指令3
fi

3.2 操作案例

  1. 根据用户输入数字,判断其优良中差。
[root@localhost shell]# cat test.sh
#!/bin/bash

read -p "Please enter your score(0-100):" grade
#输入一个数值,范围区间为0-100之内,将其赋值给定义新对象grade

if [ $grade -ge 85 ]
        then
                echo "$grade,优"
                #若grade的值大于85,则返回优
        elif [ $grade -ge 70 ]
                then
                        echo "$grade,良"
                        #若grade的值介于85和70之间,则返回良
        elif [ $grade -ge 60 ]
                then
                        echo "$grade,中"
                        #若grade的值介于70和60之间,则返回中
        else
                echo "$grade,差"
                #其他情况,返回差
fi

4、( ) 和 { } 复合指令

复合指令:一串命令的集合,( ) { }都是对一串命令进行执行;

4.1 相同点

  • ( ) { } 都是把一串命令放在括号内,用;间隔;

  • ( ) { } 某个命令的重定向只影响该命令,但是括号外的重定向则影响括号李的所有命令;

4.2 不同点

  • ( )只是对一串命令重新开一个子shell进行执行,{ } 对一串命令在当前shell执行;

  • ( ) 最后一个命令可以不用 ;{ } 最后一个命令要用;结束;

  • ( ) 第一个命令和左边括号不需要有空格,{ } 第一个命令必须和左边括号有空格;

5、exit退出程序

exit语句的基本作用是终止shell程序的执行,此外exit可以附带一个可选参数,用来指定程序退出时的状态码;

exit [status]

​ 其中,status表示退出状态,该参数是一个整数值,取值范围为0-255,;

[root@localhost shell]#  cat vendor.sh 
#!/bin/bash

vendor=`cat /proc/cpuinfo | grep vendor_id | uniq | tr -s " " | cut -d " " -f 2`
if [[ $vendor=="Genuinelnmtel" ]];then
	echo "is intel!"
elif [[ $vendor=="AuthenticAMD" ]];then
	echo "is AMD!"
else
	echo "is other!"
fi
exit 6          
#指定退出状态为6,若不为6代表脚本执行失败,以此可以判断脚本执行错误位置
[root@localhost shell]#  echo $?
6

6、case 多条件判断语句

6.1 语句格式

case 变量名 in
    值1)
        指令1
        #当变量选择值1时,执行指令1
    ;;
    值2)
        指令2
        #当变量选择值2时,执行指令2
    ;;
    值3)
        指令3
        #当变量选择值3时,执行指令3
    ;;
    *)
        默认指令
        #当变量选择值为其他时,执行默认指令
esac

6.2 操作案例

  1. ping主机测试
[root@localhost shell]# cat ping_ip.sh 
#!/bin/bash

read -p "Please enter youer ip.address(1-254):" ip_addr
#输入一个数值,范围区间为1-254之内,将其赋值给定义新对象ip_addr
ping -c 2 10.81.20.$ip_addr &> /dev/null
#将变量ip_addr的值调用,并执行命令,结果指空(指空:当前终端无任何命令执行结果的回显信息)

if [ $? -eq 0 ];then
	echo "is ok!"
   #若命令执行成功,则代表可以ping通
else
	echo "is down!"
   #若命令执行失败,则代表不能ping通
fi
  1. 判断一个用户是否存在
[root@localhost shell]# cat username.sh 
#!/bin/bash

read -p "Please enter your username:" username
grep -w $username /etc/passwd &> /dev/null

if [ $? -eq 0 ];then
	echo "$username is live!"
else
	echo "$username is none!"
fi
  1. 判断当前内核主版本是否为3,且次版本是否大于10
[root@localhost shell]# cat kernel.sh 
#!/bin/bash

aaa=`uname -r | cut -d "." -f 1`
bbb=`uname -r | cut -d "." -f 2`

if [ $aaa -eq 4 ];then 
	echo "主版本为4"
else
	echo "主版本不为4"
fi

if [ $bbb -ge 10 ];then
	echo "次版本大于10"
else
	echo "次版本小于10"
fi
  1. 判断某个软件软件包是否已经安装,如果没有则设置自动安装(需要yum源支持)
[root@localhost shell]# cat service.sh
#!/bin/bash

read -p "Please enter your check service:" Service

Service_num=`rpm -qa $Service | wc -l`

if [ $Service_num -eq 0 ];then
	echo "This Service is not install" && yum install -y $Service
	exit 2
else
	echo "This Service is install" && rpm -qa $Service | cut -d "-" -f 2
	exit 3
fi
  1. 判断某个服务是否运行,若是没有运行,则自动开启该服务,并进行回显;
[root@localhost shell]# cat service_2.sh
#!/bin/bash

read -p "Please enter your check service:" Service

while true
do
	Service_num=`ps -ef | grep $Service | wc -l`
	if [ $Service_num -gt 1 ];then
		echo "The service is running " &> /dev/null
	else
		echo "The service is not running"  && systemctl start #$Service
		break
	fi
done
  1. 判断指定的主机是否能ping通,必须使用$1变量
[root@localhost shell]# cat a1.sh 
#!/bin/bash

ping -c 1 $1 &> /dev/null

if [ $? -eq 0 ];then
	echo "this ip is ok!"
else
	echo "this ip is not ok!"
fi

[root@localhost shell]# sh a1.sh 192.168.1.1
this ip is ok!
  1. 判断用户输入的是否是数字,若不是数字,则重复输入;
[root@localhost shell]# cat input_num.sh
#!/bin/bash

while true
do
	read -p "Please enter your info:" info_file

	case "$info_file" in
		[0-9])
			echo "is number!" && break
			;;
		*)
			echo "is not number"
	esac
done
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell ❀ 条件判断语句 的相关文章

  • 有没有办法让我简化这些回声? [复制]

    这个问题在这里已经有答案了 我仍在学习如何编写 shell 脚本 并且我面临着一个挑战 让我更容易回显 Name1 Name2 Name15 我不太确定从哪里开始 我已经想法 但如果我搞砸了 我不想看起来很傻 有什么帮助吗 我实际上还没有尝
  • 如何使用shell脚本从json字符串中grep特定字段值[重复]

    这个问题在这里已经有答案了 下面是文件中可用的 JSON 字符串 我需要从中提取值status在 shell 脚本中 预期输出 status success 响应 json eventDate null dateProccessed nul
  • 如何在 Windows 下向 .sh 脚本传递参数?

    我正在尝试在 Windows 下执行 sh 脚本 我安装了 Git 它允许我执行 sh 文件 但是 如果不使用 sh 作为执行前缀 我似乎无法传递任何参数 我的 sh 文件 echo Test 1 如果我用以下命令执行它 gt sh tes
  • 如何查看正在运行的 tcsh 版本?

    如何查看我的 UNIX 终端中运行的 tcsh 的当前版本 看着那 这version多变的 echo version tcsh 6 14 00 Astron 2005 03 25 i386 intel linux options wide
  • 分叉/多线程进程|重击

    我想让我的代码的一部分更加高效 我正在考虑让它分叉成多个进程 并让它们一次执行 50 100 次 而不是只执行一次 例如 伪 for line in file do foo foo2 foo3 done 我希望这个 for 循环运行多次 我
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • 是否可以创建一个脚本来保存和恢复权限?

    我正在使用 Linux 系统 需要对一组嵌套文件和目录进行一些权限实验 我想知道是否没有某种方法可以保存文件和目录的权限 而不保存文件本身 换句话说 我想保存权限 编辑一些文件 调整一些权限 然后将权限恢复到目录结构中 将更改的文件保留在适
  • 符合 POSIX 标准的 shell 相当于 Bash“while read -d $'\0' ...”?

    我正在尝试使 Bash 脚本严格符合 POSIX 标准 即消除任何潜在的 Bashisms http mywiki wooledge org Bashism 通过使用checkbashisms px script filename 在给定的
  • 使用 plistBuddy 获取值数组

    var keychain access groups declare a val usr libexec PlistBuddy c Print var sample plist echo val echo val 0 Ouput Array
  • npm 运行如何工作?

    当我打字时会发生什么npm run
  • 在 UNIX 中删除相同的文件

    我正在处理大量 30 000 个 大小约为 10MB 的文件 其中一些 我估计 2 实际上是重复的 我只需要为每个重复的对 或三元组 保留一个副本 您能建议我一种有效的方法吗 我正在unix上工作 您可以尝试使用此代码片段在删除之前先获取所
  • sh read 命令会吃掉输入中的反斜杠吗?

    也许最容易用一个例子来解释 echo echo while read in do echo in done 看来read命令将输入 中的反斜杠解释为转义符并删除它们 我需要逐行处理文件而不更改其内容 并且我不知道如何停止在这里智能读取 有任
  • 在 bash 中,如何除以两个变量并输出四舍五入到小数点后 5 位的答案? [复制]

    这个问题在这里已经有答案了 我将两个变量作为输入 将它们相除后 我希望将输出四舍五入到小数点后 5 位 我已经尝试过这种方法 gt sum 12 n 7 output scale 5 sum n bc echo output 我的代码没有显
  • 将变量插入 sh 脚本命令[重复]

    这个问题在这里已经有答案了 bin sh f set proj dir OutputDir for projname in lib proj1 proj2 do mv scripts projname BYTECODE proj dir s
  • Bash 的源命令无法处理从互联网上卷曲的文件

    我正在尝试使用curl从互联网获取脚本文件 如下所示 source lt curl url echo done 我看到的是 完成 得到了回响before卷曲甚至开始下载文件 这是实际的命令和输出 bash 3 2 source lt cur
  • 在 Django shell 会话期间获取 SQL 查询计数

    有没有办法打印 Django ORM 在 Django shell 会话期间执行的原始 SQL 查询的数量 Django 调试工具栏已经提供了此类信息 例如 5 QUERIES in 5 83MS但如何从 shell 中获取它并不明显 您可
  • 如何在 Bash 中删除字符串的第一部分?

    该代码将给出第一部分 但是如何删除它并获取没有第一部分的整个字符串 echo first second third etc cut d f1 你应该看看info cut 这将解释什么f1 means 实际上我们只需要第二个字段之后的字段 f
  • 通过 shell 脚本查找“非”硬链接的文件

    给定一个目录 如何找到其中的所有文件 以及任何子目录 not硬链接文件 或者更具体地说 这不是具有多个引用的硬链接文件 基本上我想扫描一个文件夹并返回一个列表unique该目录中的文件 包括目录和符号链接 不是它们的目标 如果可能的话 最好
  • 在 shell/shell 脚本中设置 MongoDB 写关注

    我正在尝试填充一个集合MongoDB的壳 据我了解 使用轻松的Write Concern可以大大加快这个过程 我说的是文档 http docs mongodb org manual core write concern write oper
  • 是否可以从应用程序执行 ADB shell 命令?

    我有一个安卓电脑 http www timingpower com rk3288 with root 开箱即用 连接到始终以横向显示的外部显示器 HDMI 和 USB 即使我的应用程序在清单中的活动声明中指定纵向 android scree

随机推荐

  • ROS Catkin 教程之 CMakeLists.txt

    1 概览 CMakeLists txt 是用 CMake 构建系统构建 ROS 程序包的输入文件 任何兼容 CMake 的包都包含一个或多个 CMakeLists txt 文件 xff0c 用以描述怎样构建和安装代码 catkin 项目采用
  • ROS在roslaunch时,提示“is neither a launch file in package”或TAB时没有补全

    描述 已经设置了source devel setup bash xff0c 在同一终端用roslaunch可以 xff0c 但我在这个终端起的是roscore xff0c 新终端再用roslaunch就不行了 分析 报错是因为没找到对应的p
  • ros绑定串口

    本文主要介绍ros绑定串口设备的一种方法 1 检查有多少个设备 span class token function ls span dev ttyUSB 2 查看对应串口 查看KERNELS后面的设备的硬件端口号 udevadm info
  • Spring Boot 配置文件配置自动提示 Configuration Processor

    效果 在使用Idea等开发工具时 xff0c 配置文件中输入前缀就有对应的补全提示 xff0c 使开发者可以很方便配置相应属性 xff0c 效果截图如下 xff1a 元数据说明 这些提示来自于 spring 自动配置规范中的源数据文件 sp
  • ubuntu20.4安装python3.8

    ubuntu20 4中安装python3 8 注 ubuntu20 4自带python3 10 软连接python3与pip3指向的为python3 10本文意在安装python3 8 并将软连接python与pip指向python3 8
  • C/C++多线程、线程同步(互斥锁与信号量)

    参考链接2 中写的非常好 xff0c 简单易懂 xff0c 上手快 xff0c 非常好的博文 使用多线程及互斥锁样例 xff1a include lt iostream gt include lt windows h gt using na
  • Python ❀ 初学者学习笔记与知识点梳理

    软件安装与环境部署变量与数据类型列表与元组条件判断语句字典while循环函数类文件与异常 推荐代码练习地址 xff1a https www runoob com python python 100 examples html 点击此处直接跳
  • Shell ❀ Linux系统自动挂载本地yum源并安装rpm依赖包

    文章目录 1 脚本代码详解2 代码执行结果3 脚本参数调整 1 脚本代码详解 span class token comment bin bash span span class token builtin class name echo s
  • Windows ❀ Windows系统下端口连通性常见的验证方法

    文章目录 1 telnet1 1 telnet服务开启方法1 2 端口连通性验证 2 tcping2 1 tcping下载与安装2 2 端口连通性验证 3 netstat ano findstr3 1 findstr使用语法3 2 端口连通
  • Security ❀ 安全设备学习规范(第二版)

    文章目录 安全设备学习规范1 设备部署环境1 1 部署方式1 2 配置IP地址与路由1 3 设备冗余机制1 4 会话同步机制1 5 设备账户管理1 6 设备故障诊断 2 产品授权方式2 1 序列号2 2 Hash值 3 相关设备联动3 1
  • Windows ❀ 解决Google浏览器无法访问网页问题

    文章目录 问题 xff1a Google浏览器无法访问网页解决方法 问题 xff1a Google浏览器无法访问网页 使用Google浏览器打开某个已知安全网页时 xff0c 弹出如下信息 xff0c 错误内容如下 xff1a NET ER
  • Security ❀ CSP Bypass 内容安全策略绕过

    文章目录 内容安全策略绕过 CSP Bypass1 Low Level2 Medium Level3 High Level4 Impossible Level 内容安全策略绕过 CSP Bypass CSP 内容安全策略 xff1a 为了缓
  • Security ❀ JavaScript Attacks 前端攻击

    文章目录 JavaScript Attacks 前端攻击1 Low Level2 Medium Level3 High Level4 Impossible Level JavaScript Attacks 前端攻击 JavaScript是一
  • MiddleWare ❀ Zookeeper基础概述

    文章目录 1 认识Zookeeper1 1 数据类型1 2 监听器1 3 基本功能1 3 1 统一配置管理1 3 2 统一命名服务1 3 3 分布式锁1 3 4 集群状态 2 下载安装包3 安装服务3 1 服务端命令3 2 客户端命令 3
  • Java文件内容变更及内容追加监听方案

    简介 对于文件内容变动的监听处理 xff0c 一般分为两种主要应用场景 1 只关心文件内容是否发生变更 文件的内容发生变动的场景是全量修改模式 xff0c 不是内容追加模式 例如某xml文件内容发生变动 这种情况 xff0c 我们一般只需要
  • MiddleWare ❀ MySQL基础概述

    文章目录 MySQL基础1 SQL语法与分类1 1 DDL 数据定义语言1 1 1 库操作1 1 1 1 查询1 1 1 2 创建1 1 1 3 删除1 1 1 4 使用 1 1 2 表 43 字段操作1 1 2 1 查询1 1 2 2 创
  • Shell ❀ 基础知识概述

    文章目录 一 基本概念1 脚本文件命名方式2 解释器分类3 基本基本组成内容4 脚本编写规范与格式说明5 自动生成脚本的注释与配置信息 一 基本概念 shell又称为命令解释器 xff0c 它能识别用户输入的各种命令 xff0c 并传递给操
  • Shell ❀ 基础变量类别与引用

    文章目录 二 变量与引用1 变量命名2 变量类型3 变量定义4 常用变量4 1 内置通配符4 2 内置变量4 3 自定义变量4 4 环境变量4 5 变量的作用域4 5 1 全局变量4 5 2 局部变量 4 6 位置变量4 5 1 位置变量的
  • Shell ❀ 条件测试语句

    文章目录 三 条件测试1 基本语法2 表达式2 1 条件判断表达式2 2 字符串判断表达式2 3 数字判断表达式2 4 文件判断表达式2 5 表达式中 与 的区别2 5 1 的逻辑判断表达式2 5 2 的逻辑判断表达式 三 条件测试 1 基
  • Shell ❀ 条件判断语句

    文章目录 四 条件判断1 if 单分支格式1 1 语法格式1 2 操作案例 2 if else 双分支格式2 1 语法格式2 2 操作案例 3 if elif else 多分支结构3 1 语法格式3 2 操作案例 4 和 复合指令4 1 相