IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> shell脚本之条件语句(if、case) -> 正文阅读

[系统运维]shell脚本之条件语句(if、case)

前言

通过正确使用if语句,从而使shell脚本具备一定的“判断”能力,从而能根据不同的条件来完成不同的管理任务

一,条件测试—字符串比较

通常用来检查用户输入、系统环境是否满足条件
字符串比较格式1:[ 字符串1 = 字符串2 ]

字符串比较格式2:[ 字符串1 != 字符串2 ]

  • 常用的测试操作符

在这里插入图片描述
[root@localhost ~]# read -p "我是好人"miao
我是好人miao #-p 后面跟提示信息,即在输入前打印提示信息
[root@localhost ~]# [ $cat = “miao” ] && echo “小白”
-bash: [: =: 期待一元表达式 #出现中文字符即报错
[root@localhost ~]# [ $miao !=“mimi” ] && echo “小白”
小白 #输入不是mimi就显示小白

  • 空字符
  • read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据
    在这里插入图片描述在这里插入图片描述

二、逻辑测试

逻辑测试格式1:[ 表达式1 ] 操作符 [ 表达式2 ]

逻辑测试格式2:命令1 操作符 命令2
常用的测试操作符:
-a或&&:逻辑与,“而且”的意思,得前后条件都符合
-o或||:逻辑或,“或者” 的意思,二者其中符合一即可
!:逻辑否,只有当指定的条件不成立的时候,结果才成立
“&&”、“||”操作符能够正常存在于“[[]]”条件判断结构中,但是如果出现在“[]”结构中会报错
[root@localhost ~]# a=6								#为变量赋值
[root@localhost ~]# [ $a -ne 2 ] && [ $a -lt 8 ]	  #6不等于2而且6小于8
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ $a -eq 1 ] && [ $a -lt 8 ]	  #6等于1而且6小于8
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ $a -ne 1 -a $a -lt 8 ]           #-a的用法
[root@localhost ~]# echo $?
0
[root@localhost ~]# [[ $a -ne 1 && $a -lt 8 ]]		 #&&的[[]]用法
[root@localhost ~]# echo $?
0
[root@localhost ~]# [[ $a -ne 1 && $a -lt 8 ]] && echo 1111
1111                                         #不等于1且小于8就会输出1111 

三,IF语句

(一)、if单分支语句

单分支结构(基本格式):
if 条件测试操作
then 命令序列
fi

单分支结构(举例):
if 磁盘已用空间>80%
	then  报警
fi

在这里插入图片描述

(二)、if双分支语句

双分支结构(基本格式):
if 条件测试操作
then 命令序列1
else 命令序列2
fi

双分支结构(举例):
if 80端口是否在监听
	then  网站服务已在运行
	else  启动httpd服务
fi

在这里插入图片描述

(三)、if多分支语句

多分支结构(基本格式):
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else
命令序列3
fi

多分支结构(举例):
if 分数为85~100之间
	then  判为优秀
elif  分数为70~84之间
	then  判为合格
else
	判为不合格
fi

在这里插入图片描述

(四)、if语句实操演示

1、单分支if语句
判断大小
vim a.sh
if [ 3 -gt 2 ]     #如果3大于2
then          #成立的话
    echo "OK"       #输出OK
fi           #结束
---------或者if语句可以写成-----------
if [ 3 -gt 2 ];then echo "OK"; fi
----------或者还可以写成--------------
[ 3 -gt 2 ]  && echo "OK"
----------------------------------------------
[root@host ~]#sh a.sh       #运行脚本
OK                         #输出结果

2、多分支if语句

判断成绩是否合格
vim b.sh
#!/bin/bash
read -p "请输入你的分数(0-100):" score
if [ $score -ge 85 ] && [ $score -le 100 ]
then
     echo "$score 分,优秀!"
elif [ $score -ge 70 ]  && [ $score -le 84 ]
then
     echo "$score 分,合格!"
else
     echo "$score 分,不合格!"
fi

[root@host ~]#sh b.sh
请输入你的分数(0-100):90
90 分,优秀!
[root@host ~]#sh b.sh
请输入你的分数(0-100):50
50 分,不合格!
[root@host ~]#sh b.sh
请输入你的分数(0-100):80
80 分,合格!

三、case语句
(一)、case多分支语句
1、case语句的结构
针对变量额不同取值,分别执行不同的命令序列
这种情况与多分支的if语句非常相似,只不过if语句需要判断多个不同的条件,而case语句指示判断一个变量的不同取值
case行尾必须为单词“in”,每一模式必须以右括号“)”结束。
双分号“;;”表示命令序列的结束。
模式字符串中,可以用方括号表示一个连续的范围,如“[0-9]”;还可以用竖杠符号“|”表示“或”,如“A|B”.
zuihou dde ")"表示默认模式,其中的相当于通配符。

格式:
case 变量值 in
模式1)
	命令序列1
	;;
模式2)
	命令序列2
	;;
	....
*)
	默认命令序列
esac
举例:
case 分数 in
85~100)
	评为优秀
	;;
70~84)
	评为合格
	;;
	....
*)
	判为不合格
esac

在这里插入图片描述

(五)、case语句实操:

判断分数是否及格

[root@host ~]#vim socre.sh
case NUM in 
[89][0-9]|100)                     #这边表示的是从80分到100分,两位数的时候需要把十位和个位分开写,[89]表示十位上的8和9,[0-9]表示各位上的0-9,“|”表示或的意思。
          echo "$NUM,秀儿"       
          ;;                       #固定格式
[67][0-9])                         #表示从60分到79分
          echo "$NUM,soso"
          ;;

[0-5][0-9]|[0-9])                   #表示0到59分 ,“|”前面的表示从00-59,后面的表示0-9.
          echo "$NUM,努力"
          ;;

*)                            #表示除0-100以外的任何字符
          echo "输入有误!"
esac                           #结束语句

[root@host ~]#chmod +x socre.sh 
[root@host~]#./socre.sh 
请输入你的分数:80
80,秀儿
[root@host ~]#./socre.sh 
请输入你的分数:60
60,soso
[root@host ~]#./socre.sh 
请输入你的分数:15
15,努力
[root@host ~]#./socre.sh 
请输入你的分数:100000
输入有误!
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-08 11:09:04  更:2021-09-08 11:09:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 3:17:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码