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

news2024/11/26 0:30:59

在这里插入图片描述

👨‍🎓博主简介

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


文章目录

  • 🍁 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
   执行代码
fi

if 条件测试;then
   执行代码
eles
   执行代码
fi

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

🍁 if 判断实例:

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

#!/bin/bash

read -p "please input a number:" num

expr 10 + $num &>/dev/null
if [ $? -eq 0 ];then
     echo "${num}是整数"
else
     echo "${num}不是整数"                                  
fi

在这里插入图片描述

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

对输入成绩做判断:
如果成绩小于60;那么
	打印不及格
如果60>=成绩<80;那么
	打印及格
如果80>=成绩<90;那么
	打印良好
如果90>=成绩<=100;那么
	打印优秀
否则
	请输入0-100的整数
结尾
#!/bin/bash

read -p "please input is results:" results
expr 10 + $results &>/dev/null
if [ $? -ne 0 ];then
   echo "${results}不是合法整数"
   exit 1
fi
if [ ${results} -lt 60 ];then
    echo "不及格"
elif [ ${results} -ge 60 ] && [ ${results} -lt 80 ];then
    echo "及格"
elif [ ${results} -ge 80 ] && [ ${results} -lt 90 ];then
    echo "良好"
elif [ ${results} -ge 90 ] && [ ${results} -le 100 ];then
    echo "优秀"
else
    echo "请输入0-100之间合法的整数,您输入的是:${results}"
fi

在这里插入图片描述

🍁 for 循环

🍁 for 循环格式:

for 变量 in 取值列表;do
	执行代码
done

for 变量 in 取值列表
do
	执行代码
done

for (( i=1;i<20;i++ ));do
	执行代码;(表示循环20次执行代码)
done

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

🍁 for 循环实例:

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

#!/bin/bash

#{起始数字..终止数字..步长} 默认步长为1
for i in {2..10..2};do
    echo $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 $text

for I in {1..100};do
        touch ${text}/cs$I
done


#其实直接用touch也可以创建,这里只为了演示
#touch cs{1..100}
#会在当前目录创建cs{1..100}文件

在这里插入图片描述

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

#!/bin/bash

List="file1 file2 file3"
for I in $List;do
        echo "当前文件为 ${I}"
done

在这里插入图片描述

🍃 需求4:从命令中取值

#!/bin/bash

for I in $(cat /etc/passwd)
do
        echo "$I"
done

在这里插入图片描述

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

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

#!/bin/bash

for (( i=1;i<=10;i++ ));do
        useradd cs_$i
done

在这里插入图片描述

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

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

#!/bin/bash

for (( a=1,b=9;a<=10;a++,b-- ));do
        echo "num is $a $b"
done

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

在这里插入图片描述

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

#!/bin/bash

for (( i=1;i<=20;i++ ));do
	cs=$(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/null


for i in $(cat $DIR/a.txt);do
	useradd -g mailgroup -s /sbin/nologin $i 2>/dev/null
    echo 123456 | passwd --stdin $i
done

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

在这里插入图片描述

🍁 while 循环

🍁 while 循环格式:

while [条件测试];do
	执行代码
done

while [条件测试]
do
	执行代码
done

while true;do
	执行代码(无限循环此命令,每次循环停留两秒)
	sleep 2
done

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

🍁 while 循环实例:

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

#!/bin/bash

declare -i I=1

declare -i SUM=0

while [ $I -le 100 ]; do
	let SUM+=$I
	let I++
done

echo "$SUM"

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

在这里插入图片描述

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

#!/bin/bash

#获取脚本执行的路径
DIR=$(cd $(dirname $0) && pwd )

#创建一个用户组
groupadd mailgroup 2>/dev/null


while read username; do
	useradd -g mailgroup -s /sbin/nologin $username 2>/dev/null
	echo 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/null


cat $DIR/username.txt | while read username; do
	userdel -r $username
done

在这里插入图片描述

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

#!/bin/bash

#如果输入的不是quit则把小写字母全部换成大写字母,如果输入的是quit则退出循环,否则会一直循环;
read -p "Please enter content:" SCRIPT

while [ $SCRIPT != "quit" ]; do
	echo "$SCRIPT" | tr 'a-z' 'A-Z'
	read -p "Please enter content:" SCRIPT
done

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

在这里插入图片描述

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

#!/bin/bash

while true;do
	cs=$(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/bash

ngstart (){
	/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 in
    start)
        echo "启动nginx服务"
        ngstart
;;
    stop)
        echo "关闭nginx服务"
        ngstop
;;
    restart)
    	echo "重启nginx服务"
#        $0 stop
#        $0 start
		ngrestart
;;
	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.coloradmin.cn/o/881587.html

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

相关文章

什么是BP反向传播算法

什么是BP反向传播算法 神经网络是个好工具&#xff0c;但就像有的刀削铁如泥&#xff0c;有的却只能拿来切豆腐。 真正决定神经网络好不好用的是神经元之间连接的权重和神经元的阈值。 如何确定这些数字&#xff0c;大部分时间我们都在使用反向传播&#xff0c;也就是常说的B…

nginx 基础

巩固基础&#xff0c;砥砺前行 。 只有不断重复&#xff0c;才能做到超越自己。 能坚持把简单的事情做到极致&#xff0c;也是不容易的。 nginx简易 #配置负载均衡 upstream myaaa {server localhost:8089;server localhost:8099;}server {listen 8085;server_name lo…

WebRTC | SDP详解

目录 一、SDP标准规范 1. SDP结构 2. SDP内容及type类型 二、WebRTC中的SDP结构 1. 媒体信息描述 &#xff08;1&#xff09;SDP中媒体信息格式 i. “artpmap”属性 ii. “afmtp”属性 &#xff08;2&#xff09;SSRC与CNAME &#xff08;3&#xff09;举个例子 &…

JVM---理解jvm之对象已死怎么判断?

目录 引用计数算法 什么是引用 可达性分析算法&#xff08;用的最多的&#xff09; 引用计数算法 定义&#xff1a;在对象中添加一个引用计数器&#xff0c;每当有一个地方引用它时&#xff0c;计数器值就加一&#xff1b;当引用失效时&#xff0c;计数器值就减一&#xff1…

七夕送礼送什么?数码爱好者送什么礼物?这几件贴心实用又有心意

​在这个数字化的时代&#xff0c;数码产品成为了我们日常生活中必不可少的一部分。而在七夕这个特别的日子里&#xff0c;送上一份数码产品礼物&#xff0c;不仅可以让你的另一半感受到你的用心和关爱&#xff0c;还可以让他/她感受到科技带来的便捷和乐趣。 推荐一&#xff…

贝锐蒲公英:助力企业打造稳定高效的智能安防监控网络

随着技术的快速发展和物联网的普及&#xff0c;企业面临着许多安全威胁和风险&#xff0c;如盗窃、入侵、信息泄露等&#xff0c;企业需要建立安防监控系统来保护其资产、员工和业务运营的安全。 然而&#xff0c;企业在搭建安防监控系统的过程中&#xff0c;可能会面临一些难…

无涯教程-Perl - setnetent函数

描述 该函数应在第一次调用getnetent之前调用。 STAYOPEN参数是可选的,在大多数系统上未使用。当getnetent()从网络数据库的下一行检索信息时,setnetent会将枚举设置(或重置)为主机条目集的开头。 语法 以下是此函数的简单语法- setnetent STAYOPEN返回值 此函数不返回任何…

smardaten实战丨谁说无代码不能开发出漂亮的门户首页?

一、需求背景 门户首页对于一个公司或组织来说是一个极其重要的网站页面&#xff0c;它可以作为访问者了解和获取相关信息的入口&#xff0c;同时也是展示品牌形象和吸引目标受众的重要工具。 开发一个门户首页需要开发团队在向访问者展示关于公司或组织基本信息的基础上&…

CentOS7最小化安装使用KVM虚拟化

说明&#xff1a;本文初衷在于记录一次实战经验&#xff0c;以便后续参考&#xff0c;不具有任何权威作用&#xff0c;如若对你有帮助深感荣幸&#xff01; 一、环境安装 CentOS Linux release 7.9.2009 (Core)【不带GUI】Xshell 6Xmanager 6 # 执行 export DISPLAY客户端机器…

onnx onnxruntime onnxruntime-gpu

一、onnx简介 在训练模型时可以使用很多不同的框架&#xff0c;比如 Pytorch&#xff0c; TensorFLow&#xff0c; MXNet&#xff0c;以及深度学习最开始流行的 Caffe 等等&#xff0c;这样不同的训练框架就导致了产生不同的模型结果包&#xff0c;在模型进行部署推理时就需要不…

比较不同类型的隔离接口 IC:光耦合器与数字隔离器

隔离接口IC在确保各种电子系统中的信号完整性和安全性方面发挥着至关重要的作用。在不同类型的隔离接口IC中&#xff0c;光耦合器和数字隔离器是两种流行的选择。在本文中&#xff0c;我们将比较这两类隔离接口IC&#xff0c;探讨它们的工作原理、优点和应用。 工作原理&#x…

MODIS数据的查找与下载

记录一下自己下载 MODIS 时用过的网站。 1、LAADS DAAC 网址&#xff1a;Find Data - LAADS DAAC (nasa.gov) LAADS DAAC 的全称是 Level-1 and Atmosphere Archive & Distribution System Distributed Active Archive Center&#xff0c;专注于部分地球科学数据的集成&a…

浅谈SMT行业MES系统生产管理的特点

一、SMT生产车间在电子制造中起重要作用的部分&#xff0c;主要具备以下生产特点&#xff1a; 1.高密度和高速度&#xff1a; SMT生产车间中的电子元器件一般来说较为精小&#xff0c;且被紧密地排列在PCB上。这就要求SMT生产车间的机械设备具备高精度和高速度&#xff0c;确保…

生活中那些六 “有” 的人

1、有承诺 一些事情开始的时候总会有些协议与约定&#xff0c;我们称其为承诺&#xff1b;我们必须遵守承诺&#xff0c;即使是约会也要遵守&#xff0c;也不能迟到&#xff1b;迟到这件事不但会妨碍我们所有人&#xff0c;还意味着迟到者不尊重大家的时间。这种约定从某种意义…

SQLSERVER 查询语句加with (NOLOCK) 报ORDER BY 报错 除非另外还指定了 TOP、OFFSET 或 FOR XML

最近有一个项目在客户使用时发现死锁问题&#xff0c;用的数据库是SQLSERVER &#xff0c;死锁的原因是有的客户经常去点报表&#xff0c;报表查询时间又慢&#xff0c;然后又有人在做单导致了死锁&#xff0c;然后主管要我们用SQLSERVER查询时要加with (NOLOCK),但是我在加完 …

ant design vue 级联选择器(省市二级联动)

一、效果图 二、代码块 <a-cascader v-model:value"value" :options"options"/>data () {return {value:,options:[{"value": "北京市","label": "北京市","children": [{"value": &qu…

人工智能:人脸识别技术应用场景介绍

目录 人脸识别介绍 什么是人脸识别技术 人脸识别的流程 1、场景分类 2、认证对比 3、金融领保险应用 3.1 金融行业 3.2 保险行业 4、安防交通领域 4.1 公园景点人脸识别闸机 4.2 高铁站进站人脸识别闸机 5、警务领域 5.1 抓拍交通违法 人脸识别介绍 什么是人脸识别技术 人脸识别…

【Rust】Rust学习 第十三章Rust 中的函数式语言功能:迭代器与闭包

Rust 的设计灵感来源于很多现存的语言和技术。其中一个显著的影响就是 函数式编程&#xff08;functional programming&#xff09;。函数式编程风格通常包含将函数作为参数值或其他函数的返回值、将函数赋值给变量以供之后执行等等。 更具体的&#xff0c;我们将要涉及&#…

微信视频已过期或已被清理怎么办?4招教您轻松恢复

微信视频是我们与亲朋好友分享生活的重要方式&#xff0c;但有时可能因为工作忙碌而忘记查看原视频&#xff0c;视频没有得到缓存就会导致过期&#xff0c;再次点进去就会收到“视频已过期”的提醒。又或者是手机磁盘不足时&#xff0c;清理内存导致视频误删除。 以上两种情况…

Java多线程编程中的线程同步

Java多线程编程中的线程同步 基本概念&#xff1a; ​ 线程同步是多线程编程中的一个重要概念&#xff0c;用于控制多个线程对共享资源的访问&#xff0c;以防止数据的不一致性和并发问题。 在多线程环境下&#xff0c;多个线程同时访问共享资源可能导致数据的竞争和不正确的…