Shell编程之case多分支语句、循环语句(for、while等)、Shell函数、Shell数组
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,case多分支语句case语句的结构:针对变量的不同取值,分别执行不同的命令列case 变量值 in模式1) 命令序列1 ;;模式2) 命令序列2 ;;.....*
千家信息网最后更新 2025年12月03日Shell编程之case多分支语句、循环语句(for、while等)、Shell函数、Shell数组
case多分支语句
case语句的结构:
针对变量的不同取值,分别执行不同的命令列
case 变量值 in模式1) 命令序列1 ;;模式2) 命令序列2 ;;.....*)默认命令序列esac示例:
字符类型识别:
- 提示用户输入一个字符;
- 判断出该字符是字母、数字或者其他字符。
脚本如下:
[root@localhost opt]# vim test01.sh#!/bin/bashread -p "请输入一个字符:" keycase $key in[a-z]|[A-Z]) echo "你输入的是字母";;[0-9]) echo "你输入的是数字";;*) echo "你输入的是特殊符号"esac执行结果如下:[root@localhost opt]# chmod +x test01.sh [root@localhost opt]# ./test01.sh 请输入一个字符:3你输入的是数字[root@localhost opt]# ./test01.sh 请输入一个字符:d你输入的是字母[root@localhost opt]# ./test01.sh 请输入一个字符:#你输入的是特殊符号[root@localhost opt]# 循环语句
for循环语句:
循环结构:读取不同的变量值,用来逐个执行同一组命令。
for 变量名 in 取值列表do 命令序列done示例1:
批量添加用户:
- 用户名存放在users.txt文件中,每行一个;
- 初始密码均设为123456;
- 验证脚本。
具体实验如下:
[root@localhost opt]# tail -5 /etc/passwdavahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologintcpdump:x:72:72::/:/sbin/nologinjiang:x:1000:1000:jiang:/home/jiang:/bin/bashapache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin[root@localhost opt]# vim users.txt[root@localhost opt]# cat users.txt zhangsanlisiwangwuzhaoliu[root@localhost opt]# vim test02.sh[root@localhost opt]# cat test02.sh //shell脚本如下#!/bin/bashTMP=$(cat /opt/users.txt)for USER in $TMPdo useradd $USER && echo "123456" | passwd --stdin $USER &> /dev/nulldone[root@localhost opt]# chmod +x test02.sh [root@localhost opt]# ./test02.sh [root@localhost opt]# tail -5 /etc/passwdapache:x:48:48:Apache:/usr/share/httpd:/sbin/nologinzhangsan:x:1001:1001::/home/zhangsan:/bin/bashlisi:x:1002:1002::/home/lisi:/bin/bashwangwu:x:1003:1003::/home/wangwu:/bin/bashzhaoliu:x:1004:1004::/home/zhaoliu:/bin/bash[root@localhost opt]# [root@localhost opt]# su zhangsan[zhangsan@localhost opt]$ su lisi密码:[lisi@localhost opt]$示例2:
根据IP地址检查主机状态:
- IP地址存放在ipadds.txt文件中,每行一个;
- 使用ping命令检测各主机的连通性。
shell脚本如下:
#!/bin/bashTMP=$(cat /opt/ipadds.txt)for USER in $TMPdo ping -c 3 -i 0.2 -w 3 $USER &> /dev/null if [ $? -eq 0 ] then echo "$USER is up" else echo "$USER is down" fidonewhile循环语句:
循环结构:重复测试某个条件,只要条件成立则反复执行。
while 条件测试操作do 命令序列done示例1:
批量添加用户:
- 用户名称以stu开头,按数字顺序进行编号;
- 一共添加10个用户,即stu1、 stu2、....stu20;
- 初始密码均设为123456。
shell脚本如下:
#!/bin/bashPRE="stu"num=1while [ $num -le 10 ]do useradd $PRE$num echo "123456" | passwd --stdin $PRE$num &> /dev/dull let num++done示例2:
猜商品价格:
- 通过变量RANDOM获得随机数;
- 提示用户猜测并记录次数,猜中后退出循环。
shell脚本如下:
#!/bin/bashTIMES=0PRICE=$(expr $RANDOM % 1000)while truedoread -p "请猜价格(0-999):" moneylet TIMES++ if [ $money -gt $PRICE ] then echo "您猜的太大" elif [ $money -lt $PRICE ] then echo "您猜的太小" else echo "您猜对了,正确价格为:$num" echo "您一共猜了$TIMES次" break fi done until循环语句:
循环结构:重复测试某个条件,只要条件不成立则反复执行。
until 条件测试操作do 命令序列done
示例1:
计算1~50的和值:
- 通过循环累加的方式计算1~50的和值。
实验如下:
[root@localhost opt]# vim test04.sh[root@localhost opt]# cat test04.sh #!/bin/bashi=0sum=0until [ $i -eq 51 ]do let sum+=i let i++doneecho $sum[root@localhost opt]# chmod +x test04.sh [root@localhost opt]# ./test04.sh 1275[root@localhost opt]# 示例2:
为指定用户发送在线消息:
- 若用户不在线(未登录系统),则每10分钟试一次, 直至用户登录系统后在发送信息;
- 用户名与消息通过位置参数传递给脚本。
脚本如下:
#!/bin/bashusername=$1#判断信息格式if [ $# -lt 1 ];then echo "Usage:`basename $0` []" exit 1fi#判断用户是否存在if grep "^$username:" /etc/passwd > /dev/nullthen :else echo "用户不存在" exit 1fi#用户是否在线,如果不在线每5秒联系一次until who|grep "^$username" > /dev/nulldo echo "用户不在线" sleep 5donemes=$*echo $mes | write $username Shell函数
Shell函数定义:
将命令序列按格式写在一起可方便重复使用命令序列。
[ function ] 函数名(){ 命令序列 [return x]} //使用return或exit可以显式地结束函数调用函数的方法:
函数名 [参数1] [参数2]
示例:
两个数字求和:
- 通过sum () {}定义函数;
- 通过调用函数求两个数和。
实验如下:
[root@localhost opt]# vim test06.sh [root@localhost opt]# cat test06.sh #!/bin/bashsum(){ s=`expr $1 + $2` echo $s }[root@localhost opt]# chmod +x test06.sh [root@localhost opt]# ./test06.sh [root@localhost opt]# sum 5 611[root@localhost opt]#Shell数组
应用场景包括:
- 获取数组长度
- 获取元素长度
- 遍历元素
- 元素切片
- 元素替换
- 元素删除
......
数组定义方法:
- 方法一
数组名= (value0 value1 value2 ..)
- 方法二
数组名= ([0]=value [1]=value [2]=value ...) //数组元素之间使用空格隔开
- 方法三
列表名="value0 value1 value2 ..."数组名= ($列表名)- 方法四
数组名[0]="value"数组名[1]="value"数组名[2]="value"数组包括的数据类型:
- 数值类型
- 字符类型:使用" "或' '定义
获取数组长度:
格式:${#数组名[@\*]}实例:[root@localhost ~]# arr_ nymber=(1 2 3 4 5);[root@localhost ~]#arr_ length=${#arr_ number[*]}[root@localhost ~]# echo $arr length5读取某下标的赋值:
格式:${数组名[下标]}实例:[root@localhost ~]#arr_ index2=${arr_ number[2]}[root@localhost ~]# echo $arr_ index23数组遍历:
[root@localhost ~]# for v in ${arr_ number[@]}> do> echo $V> done12345Shell脚本调试
echo命令
bash命令
语法:sh [-nvx] 脚本名
常用选项:
-n:不执行脚本,仅检查语法。没有语法问题不显示任何内容,有问题提示报错。-v:执行脚本时,先显示脚本内容,然后执行脚本。存在错误时,给出错误提示。-x:将执行的脚本内容输出到屏幕上。set命令
set -x:开启调节模式set +x:关闭调节模式
数组
命令
用户
脚本
输入
循环
字符
序列
函数
示例
语句
元素
方法
条件
数字
在线
格式
模式
类型
结构
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器 功率因数
创建数据库备份的命令
怀旧服服务器中英文对照
网络安全的感想500字
英语作文网络技术公司招聘
怀旧服装备数据库下载
智能共享设备软件开发
五g互联网科技
大连浮点网络技术
战地五在国内有服务器吗
魔兽世界ptr服务器登陆方法
下列关于软件测试与软件开发
t-sql数据库查询所有列
配电监控网络安全制度
桂林网络安全特训营
做好网络安全工作总结
世界地图网络安全背景素材
服务器配置与管理 web
互联网十大高科技股
网络安全审查不通过
昌吉软件开发
网络安全管理培训班
安卓软件开发 视频
数据库空行符怎么删
ef支持的数据库
闵行区网络技术咨询服务平均价格
软件开发遇到什么困难
服务器如何检查木马
网络安全保密协议最新的范文
解析excel后查询数据库