【Linux】Shell脚本之流程控制语句 if判断、for循环、while循环、case循环判断 + 实战详解[⭐建议收藏!!⭐]

在这里插入图片描述

👨‍🎓博主简介

  🏅云计算领域优质创作者
  🏅华为云开发者社区专家博主
  🏅阿里云开发者社区专家博主
💊交流社区:运维交流社区 欢迎大家的加入!
🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗


文章目录

  • 🍁 if 判断
    • 🍁 if 判断格式:
    • 🍁 if 判断实例:
      • 🍃 单条件判断实例:判断是否为整数
      • 🍃 多条件判断实例:成绩及格否
  • 🍁 for 循环
    • 🍁 for 循环格式:
    • 🍁 for 循环实例:
      • 🍃 需求1:打印10以内的偶数-->能被2整除,除2余数为0
      • 🍃 需求2:循环创建文件cs{1..100}
      • 🍃 需求3:从变量中取遍历的值
      • 🍃 需求4:从命令中取值
      • 🍃 需求5:for循环自增自减
      • 🍃 需求6:批量创建用户,密码默认为123456
  • 🍁 while 循环
    • 🍁 while 循环格式:
    • 🍁 while 循环实例:
      • 🍃 需求1:计算1到100正整数的和
      • 🍃 需求2:批量创建用户,密码默认为123456
      • 🍃 需求3:提示用户输入字符,如果是小写就把字母全部变为大写,如果是quit则退出脚本
      • 🍃 需求4:无限循环执行zabbix_get调用命令
  • 🍁 case 循环判断
    • 🍁 case 循环判断格式:
    • 🍁 case 循环判断实例:
      • 🍃 nginx服务启停脚本:函数 + case
  • 相关文章:

🍁 if 判断

🍁 if 判断格式:

#单条件判断
if 条件测试;then执行代码
fiif 条件测试;then执行代码
eles执行代码
fi#多条件判断
if 条件测试;then执行代码
elif 条件测试;then执行代码
eles执行代码
fi

🍁 if 判断实例:

🍃 单条件判断实例:判断是否为整数

#!/bin/bashread -p "please input a number:" numexpr 10 + $num &>/dev/null
if [ $? -eq 0 ];thenecho "${num}是整数"
elseecho "${num}不是整数"                                  
fi

在这里插入图片描述

🍃 多条件判断实例:成绩及格否

对输入成绩做判断:
如果成绩小于60;那么打印不及格
如果60>=成绩<80;那么打印及格
如果80>=成绩<90;那么打印良好
如果90>=成绩<=100;那么打印优秀
否则请输入0-100的整数
结尾
#!/bin/bashread -p "please input is results:" results
expr 10 + $results &>/dev/null
if [ $? -ne 0 ];thenecho "${results}不是合法整数"exit 1
fi
if [ ${results} -lt 60 ];thenecho "不及格"
elif [ ${results} -ge 60 ] && [ ${results} -lt 80 ];thenecho "及格"
elif [ ${results} -ge 80 ] && [ ${results} -lt 90 ];thenecho "良好"
elif [ ${results} -ge 90 ] && [ ${results} -le 100 ];thenecho "优秀"
elseecho "请输入0-100之间合法的整数,您输入的是:${results}"
fi

在这里插入图片描述

🍁 for 循环

🍁 for 循环格式:

for 变量 in 取值列表;do执行代码
donefor 变量 in 取值列表
do执行代码
donefor (( i=1;i<20;i++ ));do执行代码;(表示循环20次执行代码)
done

取值列表中的值都将被历遍

🍁 for 循环实例:

🍃 需求1:打印10以内的偶数–>能被2整除,除2余数为0

#!/bin/bash#{起始数字..终止数字..步长} 默认步长为1
for i in {2..10..2};doecho $i
done

continue 跳过当前循环
break 终止当前循环
exit 退出脚本,同时可以指定退出时的状态码

seq [起始位置(不指定默认是1)] 终止位置
-s 指定分隔符
-w 补齐相同宽度

🍃 需求2:循环创建文件cs{1…100}

#!/bin/bash#获取脚本执行的路径
DIR=$(cd $(dirname $0) && pwd )text=$DIR/for[ ! -d $text ] && mkdir $textfor I in {1..100};dotouch ${text}/cs$I
done#其实直接用touch也可以创建,这里只为了演示
#touch cs{1..100}
#会在当前目录创建cs{1..100}文件

在这里插入图片描述

🍃 需求3:从变量中取遍历的值

#!/bin/bashList="file1 file2 file3"
for I in $List;doecho "当前文件为 ${I}"
done

在这里插入图片描述

🍃 需求4:从命令中取值

#!/bin/bashfor I in $(cat /etc/passwd)
doecho "$I"
done

在这里插入图片描述

🍃 需求5:for循环自增自减

🍃 需求5.1:批量创建cs1-cs10用户

#!/bin/bashfor (( i=1;i<=10;i++ ));douseradd cs_$i
done

在这里插入图片描述

如果需要删除这些用户,可在脚本中把useradd改为userdel -r即可;

🍃 需求5.2:输出数字 a 自增、 a自增、 a自增、b自减

#!/bin/bashfor (( a=1,b=9;a<=10;a++,b-- ));doecho "num is $a $b"
done

a的初始值为1;b的初始值为9;
a在前,所以写a最大不能>10;
a每次加1,直至加到10;b每次-1,直至a停止。

在这里插入图片描述

🍃 需求5.3:循环20次zabbix调用

#!/bin/bashfor (( i=1;i<=20;i++ ));docs=$(zabbix_get -s 172.16.10.1 -k cs)echo "调用$i次!调用结果为:$cs"echo "------------------------------------------------------------------------"
done

🍃 需求6:批量创建用户,密码默认为123456

#!/bin/bash#获取脚本执行的路径
DIR=$(cd $(dirname $0) && pwd )#创建一个用户组
groupadd mailgroup 2>/dev/nullfor i in $(cat $DIR/a.txt);douseradd -g mailgroup -s /sbin/nologin $i 2>/dev/nullecho 123456 | passwd --stdin $i
done

a.txt 中名字可以随便起;

在这里插入图片描述

🍁 while 循环

🍁 while 循环格式:

while [条件测试];do执行代码
donewhile [条件测试]
do执行代码
donewhile true;do执行代码(无限循环此命令,每次循环停留两秒)sleep 2
done

条件测试比如:$i -le 5
当条件成立时,执行循环,不成立,结束循环。
如果while中的条件永远成立,会一直循环,成为死循环。

🍁 while 循环实例:

🍃 需求1:计算1到100正整数的和

#!/bin/bashdeclare -i I=1declare -i SUM=0while [ $I -le 100 ]; dolet SUM+=$Ilet I++
doneecho "$SUM"

在执行脚本时加个 -x 可查看执行过程

在这里插入图片描述

🍃 需求2:批量创建用户,密码默认为123456

#!/bin/bash#获取脚本执行的路径
DIR=$(cd $(dirname $0) && pwd )#创建一个用户组
groupadd mailgroup 2>/dev/nullwhile read username; douseradd -g mailgroup -s /sbin/nologin $username 2>/dev/nullecho 123456 | passwd --stdin $username
done < $DIR/username.txt

username.txt

lcy
cs
abc
abb
abd
abe
abf

在这里插入图片描述
在这里插入图片描述

批量删除用户

#!/bin/bash#获取脚本执行的路径
DIR=$(cd $(dirname $0) && pwd )#创建一个用户组
groupadd mailgroup 2>/dev/nullcat $DIR/username.txt | while read username; douserdel -r $username
done

在这里插入图片描述

🍃 需求3:提示用户输入字符,如果是小写就把字母全部变为大写,如果是quit则退出脚本

#!/bin/bash#如果输入的不是quit则把小写字母全部换成大写字母,如果输入的是quit则退出循环,否则会一直循环;
read -p "Please enter content:" SCRIPTwhile [ $SCRIPT != "quit" ]; doecho "$SCRIPT" | tr 'a-z' 'A-Z'read -p "Please enter content:" SCRIPT
done

字母写的小写,全部会替换为大写,数字和其他字符不会被替换;

在这里插入图片描述

🍃 需求4:无限循环执行zabbix_get调用命令

#!/bin/bashwhile true;docs=$(zabbix_get -s 172.16.10.1 -k cs)echo "结果为$cs"echo "----------------------------------------"sleep 2
done

🍁 case 循环判断

🍁 case 循环判断格式:

case 变量 in条件或值1)执行代码
;;条件或值2)执行代码
;;条件或值3)执行代码
;;*)执行代码
esac

🍁 case 循环判断实例:

🍃 nginx服务启停脚本:函数 + case

#!/bin/bashngstart (){/usr/local/nginx/sbin/nginx
}ngstop (){/usr/local/nginx/sbin/nginx -s stop
}ngrestart (){/usr/local/nginx/sbin/nginx -s reload
}ngstatus (){/usr/local/nginx/sbin/nginx -s status
}#nginx服务器起停的脚本case $1 instart)echo "启动nginx服务"ngstart
;;stop)echo "关闭nginx服务"ngstop
;;restart)echo "重启nginx服务"
#        $0 stop
#        $0 startngrestart
;;status)echo "查看nginx服务状态"ngstatus
;;*)  echo "USage: /etc/init.d/nginx {start|stop|restart}"
esac

在这里插入图片描述

推荐一个使用case写的启动脚本,包含启动,停止及重启监测状态:linux启动、关闭、重启jar包shell脚本

相关文章:

文章名文章地址
【Linux】 shell脚本的创建及使用 《入门到实践》详解[⭐建议收藏!!⭐]https://liucy.blog.csdn.net/article/details/130111812
【Linux】Shell脚本之函数的操作+实战详解[⭐建议收藏!!⭐]https://liucy.blog.csdn.net/article/details/130387377
【Linux】Shell脚本之流程控制语句 if判断、for循环、while循环、case循环判断 + 实战详解[⭐建议收藏!!⭐]https://liucy.blog.csdn.net/article/details/130387523

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/37808.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.bit域名调研

.bit域名研究 问题&#xff1a; .bit域名和ENS域名的相同点&#xff1f;不同点&#xff1f;有什么关系&#xff1f; .bit的定义 .bit 是基于区块链的&#xff0c;开源的&#xff0c;跨链去中心化账户系统.bit 提供了以 .bit 为后缀的全局唯一的命名体系&#xff0c;可用于加密…

安全第二次

一&#xff0c;iframe <iframe>标签用于在网页里面嵌入其他网页。 1&#xff0c;sandbox属性 如果嵌入的网页是其他网站的页面&#xff0c;因不了解对方会执行什么操作&#xff0c;因此就存在安全风险。为了限制<iframe>的风险&#xff0c;HTML 提供了sandb…

分布式应用:Zabbix监控MariaDB

目录 一、理论 1.Zabbix监控MariaDB 二、实验 1.Zabbix监控MariaDB 一、理论 1.Zabbix监控MariaDB &#xff08;1&#xff09;环境 zabbix服务端&#xff1a;192.168.204.214 zabbix客户端&#xff1a;192.168.204.215 &#xff08;2&#xff09;MareaDB安装 安装 za…

做海外游戏推广有哪些条件?

做海外游戏推广需要充分准备和一系列条件的支持。以下是一些关键条件&#xff1a; 市场调研和策略制定&#xff1a;了解目标市场的文化、玩家偏好、竞争格局等是必要的。根据调研结果制定适合的推广策略。 本地化&#xff1a;将游戏内容、界面、语言、货币等进行本地化&#…

使用ip2region获取客户端地区

目录 从gitee拉取ip2region.xdb资源文件 写测试类 注意要写对资源路径 本地测试结果 ​编辑 远端测试结果 从gitee拉取ip2region.xdb资源文件 git clone https://gitee.com/lionsoul/ip2region.git 将xdb放入resources资源文件夹 引入依赖 <dependency><groupId&…

[HDLBits] Exams/m2014 q4d

Implement the following circuit: module top_module (input clk,input in, output out);always(posedge clk) beginout<out^in;end endmodule直接写out^in就行

Vue 使用 vite 创建项目

vite 是新一代前端构建工具&#xff0c;和 webpack 类似。 vite 的启动速度更快。在开发环境中&#xff0c;不需要打包就可以直接运行。 vite 的更新速度更快。当修改内容后&#xff0c;不需要刷新浏览器&#xff0c;页面就会实时更新。 vite 完全是按需编译。它只会编译需要…

【考研数学】高等数学第三模块——积分学 | Part II 定积分(反常积分及定积分应用)

文章目录 前言三、广义积分3.1 敛散性概念&#xff08;一&#xff09;积分区间为无限的广义积分&#xff08;二&#xff09;积分区间有限但存在无穷间断点 3.2 敛散性判别法 四、定积分应用写在最后 前言 承接前文&#xff0c;梳理完定积分的定义及性质后&#xff0c;我们进入…

企业网盘 vs 传统存储设备:为何云存储成为首选?

企业网盘的出现为企业提供了新的存储方式&#xff0c;相较于传统的存储设备&#xff0c;为何越来越多的企业选择了云存储呢&#xff1f; 一、存储成本 在企业数据存储方面&#xff0c;成本是企业重要的考量因素。企业网盘是基于云存储技术的存储工具&#xff0c;因此它比传统的…

基于DBN的伪测量配电网状态估计,DBN的详细原理

目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) DBN的伪测量配电网状态估计 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,是一种非常好的分类算法,本文将DBN算法伪测量配电网…

Netty:ByteBuf的资源释放方法

说明 io.netty.buffer.ByteBuf实现了io.netty.util.ReferenceCounted接口&#xff0c;需要显式释放。当ByteBuf被实例化后&#xff0c;它的引用计数是1。 调用ByteBuf对象的release方法释放&#xff1a; ByteBuf的release()方法使引用计数减少1。只有当执行以后引用计数减少…

OpenZFS 2.2 发布 RC3,支持 Linux 6.4

导读之前的 OpenZFS 2.2 候选版本已致力于实现与 Linux 6.4 内核的兼容性&#xff0c;而在 2.2-rc3 中&#xff0c;Linux 6.4 支持的元跟踪器已标记为已完成。 OpenZFS 2.2 发布了第 3 个 RC 版本。 之前的 OpenZFS 2.2 候选版本已致力于实现与 Linux 6.4 内核的兼容性&#x…

Vue3 引用第三方Swiper内容触摸滑动简单应用

去官网查看更多教程→&#xff1a;Swiper官网 → 点击教程在vue中使用Swiper→ 在Vue中使用Swiper cd 到项目 安装Swiper&#xff1a; cnpm install --save swiper 安装指定版本 cnpm install --save swiper8.1.6 9.4.1 10.1.0…

SpringBoot-Hello World

SpringBootWeb快速入门 创建Springboot工程&#xff0c;并勾选web开发相关依赖定义HelloController类&#xff0c;添加方法hello&#xff0c;并添加相关注释运行测试 创建新的SpringBoot项目 几个注意的点&#xff1a; Name&#xff1a;基本上不用管&#xff0c;会根据下面的Ar…

大数据课程I3——Kafka的消息流与索引机制

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Kafka的消息流处理; ⚪ 掌握Kafka的索引机制; ⚪ 掌握Kafka的消息系统语义; 一、Kafka消息流处理 1. Producer 写入消息 流程说明: 1. producer 要向Kafka生产消息,需要先通过…

EditPlus连接Linux系统远程操作文件

EditPlus是一套功能强大的文本编辑器&#xff01; 1.File ->FTP->FTP Settings&#xff1b; 2.Add->Description->FTP server->Username->Password->Subdirectory->Advanced Options 注意&#xff1a;这里的Subdirectory设置的是以后上传文件的默认…

20230814让惠普(HP)锐14 新AMD锐龙电脑不联网进WIN11进系统

20230814让惠普(HP)锐14 新AMD锐龙电脑不联网进WIN11进系统 2023/8/14 17:19 win11系统无法跳过联网 https://www.xpwin7.com/jiaocheng/28499.html Win11开机联网跳过不了怎么办&#xff1f;Win11开机联网跳过不了解决方法 Win11开机联网跳过不了怎么办&#xff1f;Win11开机…

Unity框架学习--5 事件中心管理器

作用&#xff1a;访问其它脚本时&#xff0c;不直接访问&#xff0c;而是通过发送一条“命令”&#xff0c;让监听了这条“命令”的脚本自动执行对应的逻辑。 原理&#xff1a; 1、让脚本向事件中心添加事件&#xff0c;监听对应的“命令”。 2、发送“命令”&#xff0c;事件…

【Git】安装以及基本操作

目录 一、初识Git二、 在Linux底下安装Git一&#xff09;centOS二&#xff09;Ubuntu 三、 Git基本操作一&#xff09; 创建本地仓库二&#xff09;配置本地仓库三&#xff09;认识工作区、暂存区、版本库四&#xff09;添加文件五&#xff09;查看.git文件六&#xff09;修改文…

基于docker部署的Selenium Grid分布式自动化测试

01、什么是Selenium Grid Selenium Grid是Selenium套件的一部分&#xff0c;它专门用于并行运行多个测试用例在不同的浏览器、操作系统和机器上。 Selenium Grid有两个版本——老版本Grid 1和新版本Grid 2。我们只对新版本做介绍&#xff0c;因为Selenium团队已经逐渐遗弃老版…