shell命令脚本(2)——条件语句

devtools/2025/2/19 11:10:02/
个人博客站—运维鹿: http://www.kervin24.top
CSDN博客—做个超努力的小奚: https://blog.csdn.net/qq_52914969?type=blog

1、条件测试(上)

1.1.1、字符串比较

基本语法:判断成功为0,不成功为1

  • 是否为空[ -z “字符串” ]
  • 是否有字符存在[ -n “字符串“ ]
  • 等于[ 字符串1==字符串2 ]
  • 不等于[ 字符串1!=字符串2 ]
[root@localhost ~]# echo $TT       TT为空[root@localhost ~]# [ -z $TT ]     判断TT是否为空
[root@localhost ~]# echo $?        为空,则返回0
0
[root@localhost ~]# TT="hellow"    TT不为空
[root@localhost ~]# [ -z $TT ]     判断TT是否为空
[root@localhost ~]# echo $?        不为空,返回非0
1

1.1.2、整数值比较

[ 整数值1 操作符 整数值2 ]

操作符含义
-eq等于(equal)
-ne不等于(not equal)
-ge大于或等于(greater or equal)
-le小于或等于(less or equal)
-gt大于(greater than)
-lt小于(less than)
[root@localhost ~]# [ 3 -lt 8 ]    3<8
[root@localhost ~]# echo $?  
0                       
[root@localhost ~]# [ 3 -gt 8 ]    3>8
[root@localhost ~]# echo $?
1
[root@localhost ~]# who      几个用户在登录
root     pts/0        2022-03-28 09:00 (192.168.96.1)
root     pts/1        2022-03-28 16:17 (192.168.96.1)
root     pts/2        2022-03-28 16:29 (192.168.96.1)
root     pts/3        2022-03-28 16:29 (192.168.96.1)
[root@localhost ~]# who | wc -l  
4
[root@localhost ~]# [ $(who | wc -l ) -ge 2 ]    登录用户>=2
[root@localhost ~]# echo $?                      
0                                                 正确

1.1.3、文件状态测试

[ 操作符 文件或目录]

操作符含义
-e判断对象是否存在(exist),若存在则结果为真
-d判断对象是否是目录(directory),是则为真
-f判断对象是否为一般文件(file),是则为真
-r判断对象是否有可读(read)权限,是则为真
-w判断对象是否有可写(write)权限,是则为真
-x判读对象是否有可执行(excute)权限,是则为真
[root@localhost ~]# [ -e /etc ]        判读文件存不存在
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -e /et ]         /et不存在
[root@localhost ~]# echo $?
1 

2、条件测试(下)

2.1、控制操作符号

使用控制符组合多个命令

  • ; 顺序执行,有错也继续执行
  • && 与逻辑关系
  • || 或逻辑关系
[ 表达式1 ]  && [ 表达式2 ]   等同于[ 表达式1 -a 表达式2  ]
[ 表达式1 ]  || [ 表达式2 ]   等同于[ 表达式1 -o 表达式2  ]

2.2、逻辑测试

类似于三元运算符号 条件表达式?a:b

[  表达式  ]   &&   a  ||  b       正确执行a,不正确执行b

示例:

[root@localhost ~]# mkdir shell          创建文件夹
[root@localhost ~]# cd /root/shell          
[root@localhost shell]# vi test01.sh     创建脚本test01
[root@localhost shell]# vim  test01.sh
[root@localhost shell]# chmod +x test01.sh   给脚本test01加执行权限
---------------------------------------
#!/bin/bash
#   -c 3表示ping3次包,-i表示指定每个包发送频率,0.5秒发一个,-w 2表示2秒后停止ping操作
ping -c 3 -i 0.5 -w 2 $1 &> /dev/null  &&  echo "$1 is online"  ||  echo "$1 is offline"
---------------------------------------
[root@localhost shell]# ./test01.sh 192.168.96.105
192.168.96.105 is online
[root@localhost shell]# ./test01.sh 192.168.96.106
192.168.96.106 is offline

1649384474189

2.3、监控脚本

  • tr -s 删除多余重复字符串

  • cut过滤数据 -d 指定以什么为分隔符,-f(n) 指定我们需要输出的列

  • awk -F '字段分隔符 ’ ‘ {print $1} ’

[root@localhost /]# echo  “a  b   c” | tr -s " "          删除多余空行
“a b c”
[root@localhost /]# echo "aaaaaaaaaa" | tr -s "a"         删除多余字母
a
--------------------------------------------------
[root@localhost /]# head -1 /etc/passwd               
root:x:0:0:root:/root:/bin/bash
[root@localhost /]# cut  -d: -f1 /etc/passwd             以:为分隔符过滤/etc/passwd第一行
root
bin
daemon
......
......

示例:

[root@localhost /]# ifconfig ens33                         
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.96.105  netmask 255.255.255.0  broadcast 192.168.96.255inet6 fe80::880:99c7:2c24:11f  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:c8:d2:cc  txqueuelen 1000  (Ethernet)RX packets 20602  bytes 1409682 (1.3 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 4058  bytes 437276 (427.0 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0[root@localhost /]# ifconfig ens33 | grep netmaskinet 192.168.96.105  netmask 255.255.255.0  broadcast 192.168.96.255
[root@localhost /]# ifconfig ens33 | grep netmask | tr -s " "inet 192.168.96.105 netmask 255.255.255.0 broadcast 192.168.96.255
[root@localhost /]# ifconfig ens33 | grep netmask | tr -s " " | cut -d" " -f3
192.168.96.105
---------------------------------------------------------------------------------------打开ens33网卡信息| 过滤出含netmask列 | 删除多余空格 | 过滤出第三列

示例2:

[root@localhost shell]# df
文件系统                   1K-块    已用    可用 已用% 挂载点
/dev/mapper/centos-root 10475520 3919364 6556156   38% /
devtmpfs                  917600       0  917600    0% /dev
tmpfs                     933524       0  933524    0% /dev/shm
tmpfs                     933524   17492  916032    2% /run
tmpfs                     933524       0  933524    0% /sys/fs/cgroup
/dev/sda1                1038336  182392  855944   18% /boot
tmpfs                     186708      24  186684    1% /run/user/0
tmpfs                     186708       4  186704    1% /run/user/42
/dev/sr0                 4414592 4414592       0  100% /run/media/root/CentOS 7 x86_64
[root@localhost shell]# df | grep /dev/sr0
/dev/sr0                 4414592 4414592       0  100% /run/media/root/CentOS 7 x86_64
[root@localhost shell]# df | grep /dev/sr0 | awk '{print $5}'
100%
[root@localhost shell]# df | grep /dev/sr0 | awk '{print $5}' | awk -F % ' {print $1}'
100

3、if语句

3.1、if单分支判断

语法:

if  条件测试then 命令序列
fi
-------------------
if 条件测试;then命令序列
fi

示例:判断用户名与密码是否为空

1648561370084

示例:监控端磁盘使用空间

df | grep /dev/sr0 | awk  '{print $5}' | awk -F %  '{print $1

1649385863113

[root@localhost shell]# ./test02.sh 警告!当前/目录的磁盘使用率为100% 

3.2、if双分支判断

if 条件测试
then 命令序列1
else命令序列2
fi
--------------------------
if  条件测试;then命令序列1
else命令序列2
fi

示例:测试主机是否ping通

1648562325930

示例2:查看端口

netstat ss

  • -natp
  • -natup
  • -lntup

1649386968165

3.3、if多分支判断

语法:

if 条件测试1;then命令序列1
elif 条件判断2;then命令序列2
.......
else 命令序列n
fi

示例:猜数字

1648563593130

示例2:查看端口

netstat ss

  • -natp
  • -natup
  • -lntup

1649386968165

4、for循环

语法:

for 变量 in  值列表
do 命令序列
done
-----------------------
for((初值;条件;步长))
do 命令序列
done
------------------------
for  变量 in { ... }
do 命令序列
done

示例:循环创建10个系统账户

1648565961047

示例:99乘法表

1648567231377

5、while循环

语法:

while 条件测试
do命令序列
done

6、case语句

  • 检查、判断变量的取值
  • 效果类似于多分支的if语句
  • 命令序列最后必须以分号结尾
case 变量 in
模式1)命令序列1;;
模式2)命令序列2;;.....
*)默认命令序列
esac

示例:

1649387866084


http://www.ppmy.cn/devtools/159255.html

相关文章

计算机网络知识速记:HTTP/2.0与HTTP/1.1

计算机网络知识速记&#xff1a;HTTP/2.0与HTTP/1.1 在现代网络应用中&#xff0c;超文本传输协议&#xff08;HTTP&#xff09;是基础的通信协议。随着技术的发展&#xff0c;HTTP协议也经历了多个版本的演变&#xff0c;其中HTTP/2.0引入了一系列显著改进以提升网络性能和用…

HTTP入门

一、铺垫 菜鸟驿站&#xff1a;https://www.runoob.com/http/http-tutorial.html 请在此网站查看HTTP的用法&#xff1b;他应该不是全系列的&#xff1b;但对于初级开发者是够用的&#xff1b;还需要诸位仔细琢磨&#xff1b; 二、原理 无论是哪种协议&#xff0c;比如HTTP…

CAS单点登录(第7版)7.授权

如有疑问&#xff0c;请看视频&#xff1a;CAS单点登录&#xff08;第7版&#xff09; 授权 概述 授权和访问管理 可以使用以下策略实施授权策略以保护 CAS 中的应用程序和依赖方。 服务访问策略 服务访问策略允许您定义授权和访问策略&#xff0c;以控制对向 CAS 注册的…

Linux 安装 Ollama

1、下载地址 Download Ollama on Linux 2、有网络直接执行 curl -fsSL https://ollama.com/install.sh | sh 命令 3、下载慢的解决方法 1、curl -fsSL https://ollama.com/install.sh -o ollama_install.sh 2、sed -i s|https://ollama.com/download/ollama-linux|https://…

【人工智能】释放数据潜能:使用Featuretools进行自动化特征工程

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 特征工程是机器学习流程中至关重要的一步,它直接影响模型的性能。然而,手动特征工程既耗时又需要领域专业知识。Featuretools是一个强大的…

上下文编辑器在不同场景下的功能(含使用案例)

上下文编辑器&#xff08;Context Editor&#xff09;解释 上下文编辑器&#xff08;Context Editor&#xff09;通常指的是一种能够修改、优化或过滤上下文信息的工具或方法&#xff0c;以增强下游任务的表现&#xff0c;特别是在 检索增强生成&#xff08;RAG&#xff09;、问…

Unity下ML-Agents第一个示例

本文写于2025年2月12日&#xff0c;需要提前安装好Anaconda。按文中步骤测试了两次都可正常运行。 一、准备Python端 1.下载并解压 ML-Agents Release 22&#xff08;使用git clone大概率会失败&#xff09; 解压路径为 C:\Users\Administrator&#xff08;Administrator为电…

markdown|mermaid|typora绘制流程图的连接线类型怎么修改?

1、使用typora绘制流程图。别人例子里面的连线是圆弧&#xff0c;我的画出来就是带折线的 这是卖家秀&#xff1a; 这是买家秀&#xff1a; 无语了有没有&#xff1f; 犹豫了片刻我决定一探究竟&#xff08;死磕&#xff09;。 Typora --> 文件 --> 偏好设置 --》 mar…