当前位置:网站首页>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 sort multiple fields and multiple values in sql statement
- The problem of lack of dynamic library "libtinfo.so.5" in ksql application under UOS system
- The pit of std::string::find return value
- High Item 02 Information System Project Management Fundamentals
- burp安装及代理设置
- mysql can't Execute, please solve it
- 软链接引发的物理备份问题
- 优炫数据库的单节点如何转集群
- ffmpeg pixel format basics
- AI+PROTAC | dx/tx completes $5 million seed round
猜你喜欢
21天学习挑战赛(2)图解设备树的使用
Kubernetes 网络入门
word分栏小记
2022 High-level installation, maintenance, and removal of exam questions mock exam question bank and online mock exam
如何在WordPress中添加特定类别的小工具
沃谈小知识 |“远程透传”那点事儿
Simple description of linked list and simple implementation of code
Study Notes-----Left-biased Tree
[论文笔记] MapReduce: Simplified Data Processing on Large Clusters
告白数字化转型时代,时速云镌刻价值新起点
随机推荐
Never put off till tomorrow what you can put - house lease management system based on the SSM
论治理与创新,2022 开放原子全球开源峰会 OpenAnolis 分论坛圆满落幕
Distributed systems revisited: there will never be a perfect consistency scheme...
Native js realizes the effect of selecting and canceling all the multi-select boxes
结构体初解
ASP.NET应用程序--Hello World
告白数字化转型时代,时速云镌刻价值新起点
Syntax basics (variables, input and output, expressions and sequential statements)
tree table lookup
腾讯云【Hiflow】新时代自动化工具
Leading the highland of digital medicine, Zhongshan Hospital explores to create a "new paradigm" for future hospitals
Why is the pca component not associated
Dameng 8 database export and import
冒泡排序与快速排序
21天学习挑战赛(2)图解设备树的使用
人人都在说的数据中台,你需要关注的核心特点是什么?
YYGH-13-客服中心
Object.defineProperty monitors data changes in real time and updates the page
STM32 uses stm32cubemx LL library series tutorial
(十一)元类