shell的for循环语句(上)

简介: shell的for循环语句

一、shell的for循环语句


1. for循环语法结构

㈠ 列表循环

列表for循环:用于将一组命令执行**已知的次数**


基本语法格式

forvariablein {list}
docommandcommanddone或者forvariableinabcdocommandcommanddone


举例说明

#forvarin {1..10};doecho$var;done#forvarin12345;doecho$var;done#forvarin`seq10`;doecho$var;done#forvarin$(seq10);doecho$var;done#forvarin {0..10..2};doecho$var;done#forvarin {2..10..2};doecho$var;done#forvarin {10..1};doecho$var;done#forvarin {10..1..-2};doecho$var;done#forvarin`seq10-21`;doecho$var;done


㈡ 不带列表循环

不带列表的for循环执行时由用户指定参数和参数的个数


基本语法格式

forvariabledocommandcommanddone


举例说明

#!/bin/bashforvardoecho$vardoneecho"脚本后面有$#个参数"


㈢ 类C风格的for循环

基本语法结构

for(( expr1;expr2;expr3 ))
docommandcommanddonefor (( i=1;i<=5;i++))
doecho$idoneexpr1:定义变量并赋初值expr2:决定是否进行循环(条件)expr3:决定循环变量如何改变,决定循环什么时候退出


举例说明

#for ((i=1;i<=5;i++));doecho$i;done#for ((i=1;i<=10;i+=2));doecho$i;done#for ((i=2;i<=10;i+=2));doecho$i;done


2. 应用案例

㈠ 脚本计算1-100奇数和

① 思路

定义一个变量来保存奇数的和 sum=0

找出1-100的奇数,保存到另一个变量里 i=遍历出来的奇数

从1-100中找出奇数后,再相加,然后将和赋值给变量 循环变量 for

遍历完毕后,将sum的值打印出来

② 落地实现(条条大路通罗马)

#!/bin/envbash#计算1-100的奇数和#定义变量来保存奇数和sum=0#for循环遍历1-100的奇数,并且相加,把结果重新赋值给sumforiin {1..100..2}
doletsum=$sum+$idone#打印所有奇数的和echo"1-100的奇数和是:$sum"方法1:#!/bin/bashsum=0foriin {1..100..2}
dosum=$[$i+$sum]
doneecho"1-100的奇数和为:$sum"方法2:#!/bin/bashsum=0for ((i=1;i<=100;i+=2))
doletsum=$i+$sumdoneecho"1-100的奇数和为:$sum"方法3:#!/bin/bashsum=0for ((i=1;i<=100;i++))
doif [ $[$i%2] -ne0 ];thenletsum=$sum+$ifi或者test$[$i%2] -ne0&&letsum=$sum+$idoneecho"1-100的奇数和为:$sum"方法4:sum=0for ((i=1;i<=100;i++))
doif [ $[$i%2] -eq0 ];thencontinueelseletsum=$sum+$ifidoneecho"1-100的奇数和为:$sum"#!/bin/bashsum=0for ((i=1;i<=100;i++))
dotest$[$i%2] -eq0&&continue||letsum=sum+$idoneecho"1-100的奇数和是:$sum"



③ 循环控制语句

循环体: do…done之间的内容


continue:继续;表示循环体内下面的代码不执行,重新开始下一次循环

break:打断;马上停止执行本次循环,执行循环体后面的代码

exit:表示直接跳出程序

[root@server~]#catfor5.sh#!/bin/bashforiin {1..5}
dotest$i-eq2&&break||touch/tmp/file$idoneechohellohahahah


㈡ 判断所输整数是否为质数

质数(素数):只能被1和它本身整除的数叫质数。

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97


① 思路

让用户输入一个数,保存到一个变量里 read -p "请输入一个正整数:" num

如果能被其他数整除就不是质数——>$num%$i 是否等于0 $i=2到$num-1

如果输入的数是1或者2取模根据上面判断又不符合,所以先排除1和2

测试序列从2开始,输入的数是4——>得出结果$num不能和$i相等,并且$num不能小于$i

② 落地实现

#!/bin/envbash#定义变量来保存用户所输入数字read-p"请输入一个正整数字:"number#先排除用户输入的数字1和2[ $number-eq1 ] &&echo"$number不是质数"&&exit[ $number-eq2 ] &&echo"$number是质数"&&exit#循环判断用户所输入的数字是否质数foriin`seq2$[$number-1]`do  [ $[$number%$i] -eq0 ] &&echo"$number不是质数"&&exitdoneecho"$number是质数"优化思路:没有必要全部产生2~$[$number-1]序列,只需要产生一半即可。更好解决办法:类C风格完美避开了生成序列的坑for (( i=2;i<=$[$number-1];i++))
do        [ $[$number%$i] -eq0 ] &&echo"$number不是质数"&&exitdoneecho"$number是质数"



㈢ 批量创建用户

**需求:**批量加5个新用户,以u1到u5命名,并统一加一个新组,组名为class,统一改密码为123


① 思路

添加用户的命令 useradd -G class

判断class组是否存在 grep -w ^class /etc/group 或者groupadd class

根据题意,判断该脚本循环5次来添加用户 for

给用户设置密码,应该放到循环体里面

② 落地实现

#!/bin/envbash#判断class组是否存在grep-w^class/etc/group&>/dev/nulltest$?-ne0&&groupaddclass#循环创建用户for ((i=1;i<=5;i++))
douseradd-Gclassu$iecho123|passwd--stdinu$idone#用户创建信息保存日志文件方法一:#!/bin/bash#判断class组是否存在grep-wclass/etc/group&>/dev/null[ $?-ne0 ] &&groupaddclass#批量创建5个用户foriin {1..5}
douseradd-Gclassu$iecho123|passwd--stdinu$idone方法二:#!/bin/bash#判断class组是否存在cut-d: -f1/etc/group|grep-wclass&>/dev/null[ $?-ne0 ] &&groupaddclass#循环增加用户,循环次数5次,for循环,给用户设定密码for ((i=1;i<=5;i++))
douseraddu$i-Gclassecho123|passwd--stdinu$idone方法三:#!/bin/bashgrep-wclass/etc/group&>/dev/nulltest$?-ne0&&groupaddclass或者groupaddclass&>/dev/nullfor ((i=1;i<=5;i++))
douseradd-Gclassu$i&&echo123|passwd--stdinu$idone


相关文章
|
17小时前
|
Shell 数据安全/隐私保护
shell的for循环语句
shell的for循环语句
44 0
|
8月前
|
Shell C语言
shell编程之for、while、until循环语句
shell编程之for、while、until循环语句
58 1
|
11月前
|
Shell
【shell】shell条件判断、循环语句、基本运算符
【shell】shell条件判断、循环语句、基本运算符
139 0
|
11月前
|
Shell
【Shell编程】Shell中for循环、while循环、until循环语句
【Shell编程】Shell中for循环、while循环、until循环语句
39 0
|
11月前
|
网络协议 Perl
Linux-Shell语言循环语句练习
Linux-Shell语言循环语句练习
75 0
|
Shell 数据安全/隐私保护
Shell编程之循环语句与函数(for、while)
Shell编程之循环语句与函数(for、while)
Shell编程之循环语句与函数(for、while)
|
Shell Linux
Shell脚本for、while循环语句及case分支语句
Shell脚本for、while循环语句及case分支语句
131 1
|
Shell Linux
shell编程之循环语句 while、until
1 while循环语句 用法: 重复测试某个条件,只要条件成立则反复执行。 使用场景:相对于for需要知道循环次数,当我们只知道停止条件,不知道次数时,就需要使用while。
110 0
|
Shell 数据安全/隐私保护
shell编程之循环语句 for (包看包会 如果不会 再看一遍)(下)
1 什么是循环 凡是重复执行一段代码, 都可以称之为循环。 循环体中三种专业的话术:遍历、迭代、递归 。 遍历(traversal) - 按规则访问非线性结构中的每一项。 迭代(iterate) - 按顺序访问线性结构中的每一项。 递归(recursion) - 在函数内调用自身, 将复杂情况逐步转化成基本情况。
156 0