shell脚本例题—for、while和until循环
时间:2021-07-16
本文章向大家介绍shell脚本例题—for、while和until循环,主要包括shell脚本例题—for、while和until循环使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
目录
一、例题1
1.1 需求
计算从1到100所有整数的和
1.2 脚本命令
sum=0
for ((i=1;i<=100;i++))
do
sum=$[$sum + $i]
done
echo $sum
1.3 验证操作
二、例题2
2.1 需求
提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
2.2 脚本命令
read -p "请输入一个整数(1-100):" num
if [ $num -ge 1 -a $num -lt 100 ];then
sum=0
for ((i=1;i<=$num;i++))
do
sum=$[$sum + $i]
done
echo "整数和为$sum"
else
echo "输入错误,请重新输入数字(1-100)"
fi
2.3 验证操作
三、例题3
3.1 需求
求从1到100所有整数的偶数和、奇数和
3.2 脚本命令
a=0
for ((i=1;i<=100;i+=2))
do
a=$[$a + $i]
done
echo "1-100内所有奇数和为$a"
b=0
for ((i=0;i<=100;i+=2))
do
b=$[$b + $i]
done
echo "1-100内所有偶数和为$b"
3.3 验证操作
四、例题4
4.1 需求
执行脚本输入用户名,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其密码
4.2 脚本命令
第一种方法:
for i in `cat /etc/shadow | awk -F ':' '{print $1}'`
do
read -p "输入用户名:" name
if [ $name = $i ];then
echo "${name}用户已存在"
exit
else
useradd $name
a=`echo $?`
if [ $a -eq 0 ];then
echo "该用户不存在,将会创建该用户并且将会输入密码"
read -p "输入密码:" mima
echo $mima | passwd --stdin $name
exit
else
exit
fi
fi
done
第二种方法:
read -p "输入用户名:" name
`useradd $name` &> /dev/null
a=`echo $?`
while [ $a -ne 0 ]
do
echo "用户已存在"
exit
done
while [ $a -eq 0 ]
do
echo "该用户不存在,将会被创建"
read -p "输入密码:" mima
echo $mima | passwd --stdin $name
exit
done
4.3 验证操作
五、例题5
5.1 需求
检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中
5.2 脚本命令
for ((a=1;a<=10;a++))
do
ping -c 2 -i 0.5 -w 2 192.168.80.$a &> /dev/null
if [ $? -eq 0 ];then
echo "192.168.80.${a} is online" >> host_ip
else
echo "192.168.80.${a} is offline" >> /dev/null
fi
done
注:这边我们用的for循环,采用遍历的方式,串行用时太长,我们可以运用多线程并行的方式来ping主机IP来缩短时间,具体命令如下:
5.3 操作验证
六、例题6
6.1 需求
用户输入密码,脚本判断密码是否正确,输入正确提示正确信息,连续输错3次则报警
6.2 脚本命令
passwd=123456
for ((i=1;i<=3;i++))
do
read -p "输入你的密码:" mima
if [ $mima = $passwd ];then
echo "密码正确,请进"
exit
else
echo "密码错误,想想再输哦"
fi
done
echo "警告,密码错3次"
6.3 验证操作
七、例题7
7.1 需求
编写能够自动生成一个8位随机密码的脚本
7.2 脚本命令
补:1.num=$[$RANDOM % ${#Str}] 中 ${#Str}代表字符长度,可以用具体数字来代替,多少位数就输多少 2.tmp=${Str:num:1}截取字符命令,其中Str指随机字符串;num指从第几位截取;1指截取的步长 3.+=叠加命令 |
7.3 验证操作
八、例题8
8.1 需求
写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额
8.2 脚本命令
a=0
i=1
sum=0
while [ $a -eq 0 ]
do
echo "欢迎来到第 $i 家商店"
read -p "是否进店选购(yes/no):" doing
while [ $doing = "yes" ]
do
echo "1:衣服¥500"
echo "2:裤子¥400"
echo "3:鞋子¥350"
echo "4:帽子¥150"
echo "5:袜子¥50"
echo "6或其他:放弃选购"
read -p "选择你需要的商品序号:" num
case $num in
1)
echo "选购衣服成功"
sum=$[$sum + 500]
;;
2)
echo "选购裤子成功"
sum=$[$sum + 400]
;;
3)
echo "选购鞋子成功"
sum=$[$sum + 350]
;;
4)
echo "选购帽子成功"
sum=$[$sum + 150]
;;
5)
echo "选购袜子成功"
sum=$[$sum + 50]
;;
*)
echo "放弃购买"
esac
read -p "是否再继续选购(yes/no):" doing
done
read -p "是否继续逛下一家商店(yes/no):" going
if [ $going = "yes" ];then
let i++
else
echo -e "谢谢惠顾!\n你一共逛了 $i 个商店.\n合计消费总额为 $sum 元"
exit
fi
done
8.3 验证操作
九、例题9
9.1 需求
输出环境变量PATH所包含的所有目录以及其中的子目录和所有可执行文件
9.2 脚本命令
9.3 验证操作
原文地址:https://www.cnblogs.com/guxd/p/15018955.html
- Silverlight菜单控件 — CurveMenu
- 实力终端撑腰 两枚域名均五位数被秒
- Silverlight制作逐帧动画 v2 - part2
- Nodejs学习笔记(四)--- 与MySQL交互(felixge/node-mysql)
- 学习Spark——环境搭建(Mac版)
- 离线网络环境下一键式部署
- WCF后续之旅(17):通过tcpTracer进行消息的路由
- Linux同步机制(一) - 线程锁
- Silverlight类库介绍-FJCore
- 大型网站的自强之路
- 人工智能:浮现
- 机器人进化 如何确保 安全概率?
- Nodejs学习笔记(七)--- Node.js + Express 构建网站简单示例
- 如何写出好代码
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Prometheus监控神器-Alertmanager篇(4)
- 71-STM32+ESP8266+AIR202基本控制篇-移植使用-移植微信小程序MQTT底层包到自己的工程项目
- 目标检测 | Anchor free之CornerNet网络深度解析
- 手把手教你 3 分钟搞定个人网站 http 免费升级到 https
- 设计模式(四):通过做蛋糕理解构建模式及Android中的变种
- 如何入门使用腾讯云物联网开发平台 IoT Explorer,开发一盏智慧城市的智能灯?
- 知道吗?容器镜像也可以延迟拉取!
- ansible超详细讲解,值得收藏
- 实战渗透 - 一个怎么够?我全都要!
- 详解 Numpy 中的视图和副本
- 详解 matplotlib 中的两种标注方法
- 混搭 TypeScript + GraphQL + DI + Decorator 风格写 Node.js 应用
- 彻底搞懂闭包,柯里化,手写代码,金九银十不再丢分!
- Kubernetes控制器--副本集ReplicaSet
- Awesome Kubernetes 系列:第一期