当前位置: 首页 > news >正文

今天我们继续学习Linux中的shell脚本流程控制内容

1.条件判断case语句


case语句的基本格式:

#!/bin/bash
#case $1 in
#[0-9])
#       command1
#;;
#[a-z])
#       command2
#;;
#*)
#       command3
#;;
#esac

#案例1:条件1【0-9】输出是数字;条件2【a-z】输出是字母;不满足以上条件
时,输出“noway”。

[root@localhost ~]# vim case.sh
case $1 in
[0-9])echo "number"
;;
[a-z])echo "letter"
;;
*)echo "noway"
;;
esac
[root@localhost ~]# chmod +x case.sh
[root@localhost ~]# ./case.sh 1
number
[root@localhost ~]# ./case.sh a
letter
[root@localhost ~]# ./case.sh aasd..
noway

案例:对nginx服务写启停脚本

vim /etc/init.d/nginxd
#!/bin/bash
#chkconfig: 35 85 19
#c2508
#20250904
#nginx start or stop script
case $1 in
start)status1=$(netstat -anptu | grep [n]ginx | wc -l)if [ $status1 -ge 1 ];thenecho "Nginx is running!"elsenginxfi
;;
stop)status1=$(netstat -anptu | grep [n]ginx | wc -l)if [ $status1 -eq 0 ];thenecho "Nginx is stopped!"elsenginx -s stopfi
;;
reload)nginx -s reload
;;
restart)status1=$(netstat -anptu | grep [n]ginx | wc -l)if [ $status1 -eq 0 ];thenecho "Nginx is stopped!"elsenginx -s stopfisleep 2nginx
;;
status)netstat -anptu | grep [n]ginx
;;
*)echo "USAGE: $0 start | stop | reload "
;;
esac
[root@localhost ~]# service nginxd start
Nginx is running!
[root@localhost ~]# service nginxd stop
[root@localhost ~]# service nginxd stop
Nginx is stopped!
[root@localhost ~]# service nginxd restart
Nginx is stopped!
[root@localhost ~]# service nginxd start
Nginx is running!
[root@localhost ~]# service nginxd status
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      30783/nginx: master 
tcp6       0      0 :::80                   :::*                    LISTEN      30783/nginx: master 
[root@localhost ~]# service nginxd stop
[root@localhost ~]# service nginxd status
[root@localhost ~]# service nginxd stop
Nginx is stopped!

case支持glob风格的通配符

*: 任意长度任意字符
?: 任意单个字符
[]: 指定范围内的任意单个字符
|: 或,如a|b ,a或b

注意:case不支持正则表达式。

示例:工作选项

[root@localhost ~]# vim tbjh.sh
#!/bin/bash
cat <<EOF
请选择
1.备份文件
2.清理日志文件
3.软件升级
4.软件回滚
5.删库跑路
EOF
read -p "请选择工作类型:" n1
case $n1 in
1)echo "备份文件!"$0
;;
2)echo "清理日志文件!"$0
;;
3)echo "软件升级!"$0
;;
4)echo "软件回滚!"$0
;;
5)echo "删库跑路!"$0
;;
q)exit
;;
*)echo "USAGE: 必须输入菜单中的数字!"$0
;;
esac

2.循环


循环执行介绍

将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件

重复运行次数

  • 循环次数事先已知

  • 循环次数事先未知

常见的循环的命令:for,while

#循环的逻辑:程序先进行语句判断,如果为真则执行循环语句,然后再进行语句判断,直至语句判断失败才跳出

2.1for循环

格式:

# 第一种写法
for NAME [in words ...]; do commands;done

# 第二种写法
for 变量 in 列表
循环体
done

# 第三种写法
for 变量 in 列表
do
循环体
done

示例:打印99乘法表

#!/bin/bash
for i in `seq 1 9`
dofor j in `seq 1 $i`doecho -e -n "$j x $i = $[i*j]\t"doneecho
done
for ((i=1;i<=9;i++))
dofor ((j=1;j<=$i;j++))doecho -e -n "$j x $i = $[i*j]\t"doneecho
done

2.2while循环

格式:

#!/bin/bash
#i=1
#while [ i -le 10]
#do
#       echo $i
#       let i++
#done

示例:

#!/bin/bash
while [ $i -le 10 ]#!/bin/bash
doecho $ilet i++
done
[root@localhost ~]# ./while.sh 
1
2
3
4
5
6
7
8
9
10

for循环与while循环的区别,for的底层代码其实就是while。

#!/bin/bash
i=1
for ((;i<=10;))
doecho $ilet i++
done

无限循环

while true;do
循环体
done

玩个猜数游戏(放松一下)

#!/bin/bash
price=$[RANDOM%1000]
times=0
while true
doread -p "请输入你猜测的价格[0 ~ 999]:" guesslet times++echo $timesif [ $guess -eq $price ];thenif [ $times -le 10 ];thenecho "搞得不错啊,兄弟$times次就猜出来了!"elseecho "搞得一般化,要猜$times次吗算?"fiexitelif [ $guess -lt $price ];thenecho "猜小啦!"elseecho "猜大啦!"fi
done


文章转载自:

http://MkJGAnVU.yyngs.cn
http://XhjGad3I.yyngs.cn
http://F3Dh5doM.yyngs.cn
http://KsL1Tght.yyngs.cn
http://2R6iIIJ3.yyngs.cn
http://MY4v6Mfi.yyngs.cn
http://JS6nairC.yyngs.cn
http://w4eAVFCq.yyngs.cn
http://jBQ2Iken.yyngs.cn
http://xNHudwED.yyngs.cn
http://CCWE1oeM.yyngs.cn
http://46BEGfbw.yyngs.cn
http://I1mKNYYI.yyngs.cn
http://wqHZ2pOh.yyngs.cn
http://jhUCvS7g.yyngs.cn
http://CuGBU14d.yyngs.cn
http://aXD5RHGd.yyngs.cn
http://PvmRfdmr.yyngs.cn
http://xQuwvYE4.yyngs.cn
http://sxYeGxk7.yyngs.cn
http://UBMBSkA0.yyngs.cn
http://pz845vs9.yyngs.cn
http://13Z8sJSI.yyngs.cn
http://oju2a0ci.yyngs.cn
http://eYARbsAg.yyngs.cn
http://BGuh3VyA.yyngs.cn
http://xv3vsec6.yyngs.cn
http://WZdc0MJJ.yyngs.cn
http://R5lMbEOg.yyngs.cn
http://PrJXTGVl.yyngs.cn
http://www.dtcms.com/a/366968.html

相关文章:

  • 大模型微调之LORA核心逻辑
  • React笔记_组件之间进行数据传递
  • 《Java餐厅的待客之道:BIO, NIO, AIO三种服务模式的进化》
  • 【OpenHarmony文件管理子系统】文件访问接口解析
  • sealos部署k8s
  • (C题|NIPT 的时点选择与胎儿的异常判定)2025年高教杯全国大学生数学建模国赛解题思路|完整代码论文集合
  • 25高教社杯数模国赛【C题国一学长思路+问题分析】第二弹
  • 数学建模25c
  • 互联网大厂Java面试场景与问题解答
  • LeetCode 刷题【64. 最小路径和】
  • Rust+slint实现一个登录demo
  • Rust 文件操作终极实战指南:从基础读写到进阶锁控,一文搞定所有 IO 场景
  • 代码随想录算法训练营第二十八天 | 买卖股票的最佳实际、跳跃游戏、K次取反后最大化的数组和
  • 2025全国大学生数学建模C题保姆级思路模型(持续更新):NIPT 的时点选择与胎儿的异常判定
  • 2025反爬虫之战札记:从robots.txt到多层防御的攻防进化史
  • 23种设计模式——工厂方法模式(Factory Method Pattern)详解
  • C++ 学习与 CLion 使用:(七)if 逻辑判断和 switch 语句
  • docker中的mysql变更宿主机映射端口
  • Redis(43)Redis哨兵(Sentinel)是什么?
  • 【连载 7/9】大模型应用:大模型应用:(七)大模型使用工具(29页)【附全文阅读】
  • 从 GPT 到 LLaMA:解密 LLM 的核心架构——Decoder-Only 模型
  • 原型链和原型
  • 嵌入式学习 51单片机(3)
  • 详细学习计划
  • 深度解读《实施“人工智能+”行动的意见》:一场由场景、数据与价值链共同定义的产业升级
  • CLIP模型
  • 深度学习篇---SENet网络结构
  • JS初入门
  • 大数据开发计划表(实际版)
  • TypeScript 增强功能大纲 (相对于 ECMAScript)