电商网站开发教程,漳州 外贸网站建设 SEO,东莞网站建设电镀挂具,在百度建免费网站吗华子目录 for循环带列表的for循环格式分析示例shell允许用户指定for语句的步长#xff0c;格式如下示例 不带列表的for循环示例 基于C语言风格的for循环格式示例注意 while循环格式示例 until循环作用格式示例 循环控制breakcontinue详细语法示例 循环嵌套示例 for循环
for循… 华子目录 for循环带列表的for循环格式分析示例shell允许用户指定for语句的步长格式如下示例 不带列表的for循环示例 基于C语言风格的for循环格式示例注意 while循环格式示例 until循环作用格式示例 循环控制breakcontinue详细语法示例 循环嵌套示例 for循环
for循环是最简单也是最常用的循环语句。与其他的程序设计语言一样for循环都是初学者在学习循环结构时的入门课程。for循环通常用于遍历整个对象或者数字列表。按照循环条件的不同for循环语句可以分为带列表的for循环、不带列表的for循环以及类C风格的for循环。本节将介绍这3种不同的for循环结构。
带列表的for循环
格式
for 循环变量 in {list}
dostatement1statement2...
done分析
variable称为循环变量list是一个列表可以是一系列的数字或者字符串元素之间使用空格隔开do和done之间的所有的语句称为循环体即循环结构中重复执行的语句执行时Shell会将in关键字后面的list列表的第1个元素的值赋给变量variable然后执行循环体当循环体中的语句执行完毕之后剩余以此类推当list列表中的所有的元素都被访问后for循环结构终止程序将继续执行done语句后面的其他的语句
示例
[rootserver ~]# vim for1.sh
#!/bin/bash
for ip in 192.168.80.129 192.168.80.130
doecho $ip
done[rootserver ~]# bash for1.sh
192.168.80.129
192.168.80.130[rootserver ~]# vim for2.sh
#!/bin/bash
for ip in 192.168.80.{120..140..1} # 使用{start..end..step} 进行扩展
doecho $ip
done[rootserver ~]# bash for2.sh
192.168.80.120
192.168.80.121
192.168.80.122
192.168.80.123
192.168.80.124
192.168.80.125
192.168.80.126
192.168.80.127
192.168.80.128
192.168.80.129
192.168.80.130
192.168.80.131
192.168.80.132
192.168.80.133
192.168.80.134
192.168.80.135
192.168.80.136
192.168.80.137
192.168.80.138
192.168.80.139
192.168.80.140获取指定目录下的所有目录的文件名
[rootserver ~]# vim for3.sh
#!/bin/bash
for file in $(ls -F / | grep /$)
doecho $file | cut -d / -f1
done# ls -F :用于将目录内的文件按照文件类型进行归类显示会在不同类别的文件名尾部增加不同的标识符目录以/结尾、链接文件以结尾、可执行文件以*结尾、普通文件无符号
# grep /$ 表示过滤以/结尾的行[rootserver ~]# bash for3.sh
afs
boot
dev
etc
home
media
mnt
opt
proc
root
run
srv
sys
tmp
usr
varshell允许用户指定for语句的步长格式如下
for variable in {start..end..step}
dostatement1statement2...
done示例
例3计算12345……100和
[rootserver ~]# bash for4.sh
#!/bin/bash
sum0
for i in {1..100..1}
do((sum$sum$i))
done
echo sum$sum[rootserver ~]# bash for4.sh
sum5050# 上例修改
[rootserver ~]# bash for4.sh
#!/bin/bash
sum0
for i in $(seq 100)
do((sum$sum$i))
done
echo sum$sum[rootserver ~]# bash for4.sh
sum5050不带列表的for循环
原则for不提供循环列表shell将从命令行相当于以位置参数的形式传入循环列表获取循环列表数据及条件格式
for variable
dostatement1statement2...
done由于系统变量$可以获取所有位置参数以上的语法等价于
for variable in $或$*
dostatement1statement2...
done示例
[rootserver ~]# vim for5.sh
#!/bin/bash
for arg
do echo $arg
done [rootserver ~]# bash for5.sh {1..10..2}
1
3
5
7
9基于C语言风格的for循环
格式
for ((初始化;条件表达式;步长)) # 注意2个圆括号
dostatement1statement2...
done示例
面试题批量创建账户
[rootserver ~]# vim for6.sh
#!/bin/bash
for((i1;i10;i))
doif ! id -u temp$i /dev/nullthenuseradd temp$iecho 123456 | passwd --stdin temp$i /dev/nullelseecho temp$i 账户已存在fi
done [rootserver ~]# bash for6.sh
[rootserver ~]# id temp1
用户id1001(temp1) 组id1001(temp1) 组1001(temp1)注意
i表示置后自增i置前自增
[rootserver ~]# x1
[rootserver ~]# y2
[rootserver ~]# echo $((x))
1
[rootserver ~]# echo $x
2
[rootserver ~]# echo $((y))
3
[rootserver ~]# echo $y
3while循环
格式
while expression
dostatement1statement1……
done上例语法中expression表示条件表达式循环必须满足该表达式否则循环结束可以是任何符合语法的shell命令但推荐书写测试表达式
示例
while循环读取文件
# 法1 采用exec读取文件
[rootserver ~]# vim file1.txt
data1
data2
data3
data4
data5
[rootserver ~]# vim while1.sh
#!/bin/bash
exec file1.txt
while read a
doecho $a
done
# exec file1.txt 将file.txt文件内容读入到标准输入中
# read a 表示从标准输入中按照行读取内容到变量a[rootserver ~]# bash while1.sh
data1
data2
data3
data4
data5# 法2使用cat读取文件通过管道符进入while循环处理
cat 文件名 | while read line
do statement1statement1……
done#法3 在while循环尾部使用输入重定向指定输入数据
while read line
dostatement1statement1……
done 文件名猜商品价格通过变量RANDOM获取随机整数并控制20以内提示用户猜测商品价格猜测时需要记录次数猜中后退出程序
[rootserver ~]# vim while2.sh
#!/bin/bash
price$[ $RANDOM%20 ]
count0
while true
doread -p 请输入[0-20]间的商品价格: INTlet countif(($INT$price))thenecho 恭喜,你猜中!echo 你使用了$count次机会exit 0elif (($INT$price))thenecho 你输入的商品价格高了!elseecho 你输入的商品价格低了!fi
done[rootserver ~]# bash while2.sh
请输入[0-20]间的商品价格10
你输入的商品价格高了
请输入[0-20]间的商品价格5
你输入的商品价格高了
请输入[0-20]间的商品价格3
你输入的商品价格高了
请输入[0-20]间的商品价格2
你输入的商品价格高了
请输入[0-20]间的商品价格1
你输入的商品价格高了
请输入[0-20]间的商品价格0
恭喜你猜中了
你使用了6次机会until循环
作用
until循环不断地重复执行循环中的语句直至某个条件成立与while循环的执行条件相反
格式
until expreession
dostatement1statement2……
done示例
[rootserver ~]# vim while3.sh
# while3.sh 的改写
#!/bin/bash
i1
until [ $i -gt 10 ] # i10 注意条件要相反
doif id -u temp$i /dev/nullthenuserdel -r test$ielseecho test$i 账户已删除filet i
done循环控制
break
break: 是立即跳出某个循环结构。break语句可以用在for、while或者until等循环语句的循环体中
continue
continue: 作用不是退出循环体。而是跳过当前循环体中该语句后面的语句重新从循环语句开始的位置执行
详细语法 示例
判断素数
[rootserver ~]# vim for7.sh
#!/bin/bash
read -p 请输入一个正整数: prime
if ((prime2))
thenecho 数据错误,请输入大于等于2的正整数!
else for ((i2;iprime;i))do if ((prime%i0))then echo 平数breakfi done if ((iprime))then echo 素数fi
fi
计算100到150之间不能被3整除的数输出时一行显示5个
[rootserver ~]# bash for8.sh
#!/bin/bash
count0
for((i100;i150;i))
doif ((i%30))thencontinuefiecho -ne $i\t((count))if ((count%50))thenechofi
done
echo循环嵌套
示例
九九乘法表
[rootserver ~]# bash for9.sh
#!/bin/bash
for i in $(seq 9)
dofor j in $(seq 9)do((ji)) echo -ne $i*$jecho $((i*j)) \tdoneecho
done打印三角形
[rootserver ~]# bash for10.sh
#!/bin/bash
read -p 请输入图形行数 h
for ((i0;ih;i)) # 循环处理h行
dofor ((j0;jh-i;j)) # 每行打印一些空格doecho -n donefor ((k0;k2*i1;k)) # 每行打印一些星号doecho -n *doneecho # 每行最后打印一个\n
done打印数字三角形
[rootserver ~]# bash for11.sh
#!/bin/bash
for ((i1;i10;i))
dofor ((j1;j10-i;j))doecho -n donefor ((k1;ki;k))doecho -n $idoneecho
done