当前位置:网站首页>Shell script: for loop and the while loop
Shell script: for loop and the while loop
2022-08-05 03:20:00 【UC Shock Department】
目录
一、for循环
forSimple case of loops:
计算1-100的偶数和
sum=0
for ((i=0 ;i<=100; i+=2)) //for i in { 0..100..2}
do
let sum=$i+$sum
done
echo "1-100的偶数和为: $sum"
例1:打印1-5这5个数字

例2:打印5次hello world
注意:虽然我们定义了一个变量i,但是没有使用它,它只是控制循环次数

例3:打印abcde

#!/bin/bash
for i in a b c d e
do
echo $i
done
例4:输出0-50之间的偶数
#!/bin/bash
for i in {0..50..2} //..2代表步长为2,每隔2个输出
do
echo $i
done
附1小技巧:花括号{}和seq在for循环的应用
- for i in {1..50..2] 1-50的奇数
- for i in {2..50..2} 1-50的偶数
- for i in { 10..1} 1-10倒序排列
- for i in $ (seq 10)1-10正序排列
- for i in $ (seq 10 -1 1)1-10倒序排列
- for i in $(seq 1 2 10)1-10的奇数,中间为步长
- for i in $ (seq 0 2 10) 1-10的偶数,中间为步长
例子
for i in $ (seq 0 2 10) ; do echo $i ; done
for循环的第一种格式
for 变量名
do
command
done
打印hello
#!/bin/bash
for i
do
echo hello
done 
第二种:
for i
do
echo $i
done
打印1-10的奇数
#!/bin/bash
for ((i=1;i<=10;i+=2)) //i=i+2
do
echo $i
done 
数字炸弹游戏: 要求在1-100内定义一个数字,与用户交互,要求,Remind the user every time,Guess the number is bigger or smaller,直到猜中为止,The final count of guesses
PS:Numbers guessed each time are not allowed to be repeated(The script itself detects)
[[email protected] opt]# cat shu.sh
#!/bin/bash
sum=0 //次数
a=$(expr $[RANDOM%100+1])
for ((i=1;i<=20;i++))
do
read -p "请输入(0-100)一个整数: " nb
if [ $nb -eq $a ];
then
let sum++
echo "猜中,猜了$sum次"
exit //结束循环
elif [ $nb -lt $a ];
then
echo "猜小了"
let sum++
continue //退出本次循环,进行下一次
elif [ $nb -gt $a ];
then
echo "猜大了"
let sum++
continue
fi
done
二、while循环
while循环一般用于有条件判断的循环,若判断条件为真,则进入循环,当条件为假就跳出循环
1、语法结构
while 表达式
do
command
done
打印1-5
[rootserver ~]# vim while.sh
#!/bin/bash
i=1
while [ $i -le 5 ] (布尔值表达式)
do
echo $i
let i++ //注意这里如果不改变$i的值,会变成死循环
# i=$[$i+1] //两种写法
done
echo "最后i的值为: $i"
输出1-100之间不能被3整除的数字
[[email protected] myscripts]# vim 33.sh
#!/bin/bash
i=1
while [ $i -le 100 ]
do
if [[ $i%3 -ne 0 ]]
then
echo "$i"
fi
let i++
done
2、while死循环
while [ 1 -eq 1] //写一个永远为真的表达式,1等于1这个条件永远为真,所以这个脚本会一直循环下去
do
command
done
while true
do
command
done
while :
do
command
done
while truedo
let a++
echo $a
break (continue) exit
done
监控某服务(httpd)运行状态
#!/bin/bash
while ps aux | grep httpd | grep -v grep &> /dev/null
do
echo "httpd 正在运行中"
sleep 2
done
echo "httpd 不在运行"

猜商品价格游戏
$random用于生成0-32767的随机数
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
a=0
echo "商品实际价格范围为o-999,猜猜看是多少?"
while true
do
read -p "请输入你猜测的价格数目: " n
let a++
if [ $n -eq $PRICE ];
then
echo "恭喜你答对了,实际价格是$PRICE”
echo "你总共猜测了$a次"
exit 0
elif [ $n -gt $PRICE ];
then
echo "你猜高了!"
else
echo "你猜低了!"
fi
done 
案例:需求:首先要求有4家店,每家店 3个商品(3个商品的价格统一为100 200 300),然后要求以交互式的方式,让用户选择进入哪家店,并且选择哪个商品(If the user enters the store,Assume that at least one must be bought),The final statistics of the consumer price
#!/bin/bash
i=1
sum=0
while [ $i -le 5 ]
do
echo "进入第$i家商店"
read -p "是否进入看看(yes/no)" doing
while [ $doing = "yes" ]
do
echo "1:衣服¥200"
echo "2:鞋子¥150"
echo "3:手套¥40"
echo "4:裤子¥155"
read -p "请选择需要购买的商品序列:" num
case $num in
1)
echo "衣服购买成功"
expr $[sum+=200] &> /dev/null
;;
2)
echo "鞋子购买成功"
expr $[sum+=150] &> /dev/null
;;
3)
echo "手套购买成功"
expr $[sum+=40] &> /dev/null
;;
*)
echo "裤子购买成功"
expr $[sum+=155] &> /dev/null
esac
read -p "是否继续进行购买(yes/no)" doing
done
let i++
if [ $doing = "no" ]
then
continue
fi
done
echo "购物总价:$sum"
3、循环控制语句
for循环一般会搭配条件判断语句和流程控制语句一起执行,那么就会出现需要跳过循环和中止循环的情况,控制循环的命令有以下3个
- continue 继续,但不会执行循环体内下面的代码了,开始重新开始下一次循环
- break 打断,马上停止本次循环,执行循环体外的代码
- exit 跳出循环
边栏推荐
- How to transfer a single node of Youxuan database to a cluster
- 基于生长的棋盘格角点检测方法
- The linear table lookup
- sql server 安装提示用户名不存在
- 今年七夕,「情蔬」比礼物更有爱
- The pit of std::string::find return value
- Data storage practice based on left-order traversal
- .NET Application -- Helloworld (C#)
- 语法基础(变量、输入输出、表达式与顺序语句完成情况)
- 使用二维码传输文件的小工具 - QFileTrans 1.2.0.1
猜你喜欢

Simple description of linked list and simple implementation of code

.NET Application -- Helloworld (C#)

Data storage practice based on left-order traversal

Web3.0 Dapps——通往未来金融世界的道路

Talking about data security governance and privacy computing

ASP.NET application--Hello World

引领数字医学高地,中山医院探索打造未来医院“新范式”

【软件测试】自动化测试之unittest框架

word分栏小记

YYGH-13-客服中心
随机推荐
On governance and innovation, the 2022 OpenAtom Global Open Source Summit OpenAnolis sub-forum came to a successful conclusion
Details such as compiling pretreatment
Object.defineProperty monitors data changes in real time and updates the page
Review 51 MCU
优炫数据库的单节点如何转集群
从“能用”到“好用” 国产软件自主可控持续推进
Solve the problem of port occupancy Port xxxx was already in use
ffmpeg pixel format basics
A small tool to transfer files using QR code - QFileTrans 1.2.0.1
In 2022, you still can't "low code"?Data science can also play with Low-Code!
队列题目:最近的请求次数
Queue Topic: Recent Requests
冰蝎V4.0攻击来袭,安全狗产品可全面检测
Use SuperMap iDesktopX data migration tool to migrate map documents and symbols
Matlab drawing 3
Summary of domestic environments supported by SuperMap
Syntax basics (variables, input and output, expressions and sequential statements)
十五. 实战——mysql建库建表 字符集 和 排序规则
You may use special comments to disable some warnings. 报错解决的三种方式
private封装