【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.rhkb.cn/news/91095.html

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

相关文章

从0开始搭建一个Monorepo模版,基于Turborepo+pnpm+changesets+dumi

Monorepo 前言开始一、使用turborepo初始化项目二、调整目录结构及文件1. 调整package.json文件2. 调整app目录3. 调整eslint包4. 调整ui包5. 调整eslint配置6. 调整.npmrc7. 使用commitizen规范代码提交8. 使用commitlinthusky进行 commit提交信息校验9. 使用husky进行commit前…

Rust 重载运算符|复数结构的“加减乘除”四则运算

复数 基本概念 复数定义 由实数部分和虚数部分所组成的数&#xff0c;形如a&#xff0b;bi 。 其中a、b为实数&#xff0c;i 为“虚数单位”&#xff0c;i -1&#xff0c;即虚数单位的平方等于-1。 a、b分别叫做复数a&#xff0b;bi的实部和虚部。 当b0时&#xff0c;a&…

利用python实现批量登录网络设备进行日常巡检

利用python实现批量登录网络设备 实现ensp与物理机互通ensp 配置配置网络设备远程登录 用python实现批量登录常见问题 通过阅读本文可以学习自动化运维相关知识&#xff0c;本文章代码可以直接使用&#xff0c;通过批量登录功能后&#xff0c;可以按照自己意愿进行功能更改与完…

OpenCV图像处理——边缘检测

目录 原理Sobel检测算子方法应用 Laplacian算子Canny边缘检测原理 原理 Sobel检测算子 方法 应用 sobel_x_or_ycv.Sobel(src,ddepth,dx,dy,dst,ksize,scale,delta,borderType)import numpy as np import cv2 as cv import matplotlib.pyplot as pltimgcv.imread(./汪学长的随堂…

无需停服!PostgreSQL数据迁移工具-NineData

PostgreSQL 是一种备受开发者和企业青睐的关系型数据库&#xff0c;其丰富的数据类型、地理空间负载和强大的扩展能力等特性使其备受欢迎。然而&#xff0c;在企业使用 PostgreSQL 承载应用的过程中&#xff0c;由于业务需要上云、跨云、下云、跨机房迁移、跨地域迁移、数据库版…

云上社群学习系统部分接口设计详解

目录 一、项目简介 二、技术选型 三、数据库设计 四、接口设计及思考 回复帖子部分 4.1 回复帖子 4.1.1.1 实现逻辑 4.1.1.2创建Service接⼝ 4.1.1.3 实现Service接⼝ 4.1.1.4 实现Controller 4.1.1.5 测试接口 4.1.1.6 实现前端页面 4.2 点赞帖子 4.2.1.1 参数要求…

【数据结构】堆的实现,堆排序以及TOP-K问题

目录 1.堆的概念及结构 2.堆的实现 2.1初始化堆 2.2销毁堆 2.3取堆顶元素 2.4返回堆的大小 2.5判断是否为空 2.6打印堆 2.7插入元素 2.8堆的向上调整 2.9弹出元素 2.10堆的向下调整 3. 建堆时间复杂度 4. 堆的应用 4.1 堆排序 4.2 TOP-K问题 1.堆的概念及结构 …

【Spring】统一事件的处理(拦截器、统一异常处理、统一数据格式返回)

文章目录 前言一、Spring 拦截器1.1 用户登录权限校验案例1.1.1 最初的用户登录验证1.1.2 使用 Spring AOP 实现登录验证的问题 1.2 Spring 拦截器的使用1.2.1 Spring 拦截器概念与使用步骤1.2.2 使用拦截器实现对用户登录权限的校验 1.3 拦截器实现原理1.4 Spring 拦截器和 Sp…

响应式设计是什么?怎么学习? - 易智编译EaseEditing

响应式设计是一种用于创建能够适应不同设备和屏幕尺寸的网站和应用程序的设计方法。它的目标是确保网站在各种设备上都能提供良好的用户体验&#xff0c;无论是在大屏幕的桌面电脑上还是在小屏幕的移动设备上。 在响应式设计中&#xff0c;页面的布局、字体、图像和其他元素会…

读《芯片浪潮》,学习台积电张忠谋的管理之道

大家知道&#xff0c;台积电一个公司就占据了全球晶圆代工市场一半的份额。 5纳米及以下最先进工艺的芯片&#xff0c;台积电可占到惊人的90%以上的市场。全球最新最强的智能手机、笔记本电脑的核心计算芯片都必须仰仗台积电一个企业的供应。 换一个说法&#xff0c;如果没有…

每天一道leetcode:剑指 Offer 12. 矩阵中的路径(中等DFS深度优先遍历)

今日份题目&#xff1a; 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元…

62、华为昇腾开发板Atlas 200I DK A2配置mmpose的hrnet模型推理python/c++

基本思想&#xff1a;适配mmpose模型&#xff0c;记录一下流水帐&#xff0c;环境配置和模型来自&#xff0c;请查看参考链接。 链接: https://pan.baidu.com/s/1IkiwuZf1anyKX1sZkYmD1g?pwdi51s 提取码: i51s 一、转模型 (base) rootdavinci-mini:~/sxj731533730# atc --mo…

docker pull 设置代理 centos

On CentOS the configuration file for Docker is at: /etc/sysconfig/docker 用 root 权限打开 text editor sudo gedit 注意 加引号 Adding the below line helped me to get the Docker daemon working behind a proxy server: HTTP_PROXY“http://<proxy_host>:&…

C++ 动态规划经典案例解析之最长公共子序列(LCS)_窥探递归和动态规划的一致性

1. 前言 动态规划处理字符相关案例中&#xff0c;求最长公共子序列以及求最短编辑距离&#xff0c;算是经典中的经典案例。 讲解此类问题的算法在网上一抓应用一大把&#xff0c;即便如此&#xff0c;还是忍不住有写此文的想法。毕竟理解、看懂都不算是真正掌握&#xff0c;唯…

浅谈统一权限管理服务的设计与开发

作者 | 天地练心 导读 本文详细探讨了统一权限管理服务&#xff08;MPS&#xff09;的设计与开发&#xff0c;针对企业内部多平台权限管理混乱的问题&#xff0c;提出了一套综合RBAC、ACL、DAC权限模型的解决方案。文章从需求分析、技术选型、功能设计等方面全面介绍了MPS的构建…

阿里云ACP知识点

前言&#xff1a;记录ACP错题 1、在创建阿里云ECS时&#xff0c;每台服务器必须要包含_______用来存储操作系统和核心配置。 系统盘&#xff08;不是实例&#xff0c;实例是一个虚拟的计算环境&#xff0c;由CPU、内存、系统盘和运行的操作系统组成&#xff1b;ESC实例作为云…

2023国赛数学建模E题思路分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…

纯js点击按钮切换首页部分页面

像我这种大数据的&#xff0c;不会前端的&#xff0c;懒得学框架&#xff0c;现在有gpt了&#xff0c;前端对于我来说&#xff0c;用原生的更加友好&#xff0c;毕竟算法gpt都能优化。 首页我有个页面&#xff0c;然后我现在想点击gm替换上面的统计&#xff0c;点击用户替换回…

Flask Web开发实战(狼书)| 笔记第1、2章

前言 2023-8-11 以前对网站开发萌生了想法&#xff0c;又有些急于求成&#xff0c;在B站照着视频敲了一个基于flask的博客系统。但对于程序的代码难免有些囫囵吞枣&#xff0c;存在许多模糊或不太理解的地方&#xff0c;只会照葫芦画瓢。 而当自己想开发一个什么网站的时&…

SpringCloud微服务之间如何进行用户信息传递(涉及:Gateway、OpenFeign组件)

目录 1、想达到的效果2、用户信息在微服务之间传递的两种途径3、用RuoYi-Cloud为例进行演示说明&#xff08;1&#xff09;网关将用户信息写在请求头中&#xff08;2&#xff09;业务微服务之间通过OpenFeign进行调用&#xff0c;并且将用户信息写在OpenFeign准备的请求头中&am…