Shell编程循环语句for while until(心有所觉,但亦做不解)

一、for 循环

1.用法和特点

读取不同的变量值,用来逐个执行同一组命令
for循环经常使用在已经知道要进行多少次循环的场景

在这里插入图片描述

for 变量 in 取值列表    -- 默认取值分割符(空格、制表符、换行符)

do{

    命令序列              

done 或 }

2.执行指定次数

取值列表(指定取值)

for value in 1 2 3 4 5 //每个取值用空格分开
do
命令序列
done

[root@localhost1 ~]#vim test4.sh
#!/bin/bash
for i in 1 2 3 4
do
  echo $i
done
 
[root@localhost1 ~]#bash test4.sh
1
2
3
4

3.遍历和迭代

迭代和遍历实现的方式不同,但都可以实现循环执行指定范围的所有值

(1)遍历

for value in {1… 10}
do
命令序列
done
for value in $(seq 1 10)
do
命令序列
done

[root@localhost1 ~]#vim test5.sh
#!/bin/bash
for i in {1..4}   -- 方式1
do
  echo $i
done
 
echo "-------------"
 
for i in $(seq 1 4)  -- 方式2
do
  echo $i
done
 
[root@localhost1 ~]#bash test5.sh
1
2
3
4
-------------  遍历执行效果相同
1
2
3
4

指定步长(两种方法位置不一样,用n表示)

for value in {1… 10…n}
do
命令序列
done
for value in $(seq 1 n 10)
do
命令序列
done

//指定步长,如步长为2可以实现奇偶数
[root@localhost1 ~]#vim test6.sh
#!/bin/bash
for i in {1..10..2}  --起始为奇数
do
  echo $i
done
 
echo "-------------"
 
for i in $(seq 2 2 10)  --起始为偶数
do
  echo $i
done
 
[root@localhost1 ~]#bash test6.sh
1      
3
5
7
9
-------------
2
4
6
8
10

(2)迭代

for ((i=1;i<=10;i++))
do
命令序列
done
//类似c语言的迭代方式,第一个字段定义变量并赋给初始值;第二个字段指定循环范围条件;第三个字段指定迭代规则(类似步长)

[root@localhost1 ~]#vim test7.sh
#!/bin/bash
for ((i=1;i<=10;i++))
do
  echo $i
done
 
[root@localhost1 ~]#bash test7.sh
1
2
3
4
5
6
7
8
9
10

4.实例

//批量创建用户并修改密码
[root@localhost1 data]#vim adduser.sh
#!/bin/bash
for user in {1..10}
do
  useradd user${user}
  echo "123456" | passwd --stdin user${user}
done
 
[root@localhost1 data]#bash adduser.sh
更改用户 user1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 user2 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 user3 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 user4 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 user5 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 user6 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 user7 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 user8 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 user9 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 user10 的密码 。
passwd:所有的身份验证令牌已经成功更新。
 
[root@localhost1 data]#tail /etc/passwd
user1:x:1002:1002::/home/user1:/bin/bash
user2:x:1003:1003::/home/user2:/bin/bash
user3:x:1004:1004::/home/user3:/bin/bash
user4:x:1005:1005::/home/user4:/bin/bash
user5:x:1006:1006::/home/user5:/bin/bash
user6:x:1007:1007::/home/user6:/bin/bash
user7:x:1008:1008::/home/user7:/bin/bash
user8:x:1009:1009::/home/user8:/bin/bash
user9:x:1010:1010::/home/user9:/bin/bash
user10:x:1011:1011::/home/user10:/bin/bash

二、 while 循环

1.用法和特点

满足条件就一直循环,一旦不满足条件立刻跳出循环
while循环常在不知道范围的时候使用
基于这个特点 无限循环可以使用 while true

while 条件表达式

do

    命令序列              

done

2.操作实例

//百米赛跑,速率为10m/s
[root@localhost1 data]#vim whiletest.sh
#!/bin/bash
i=0
rate=10
s=0
while [ $i -lt 100 ]
do
  let i+=$rate
  let s++
done
 
echo "您一共用了$s秒!"
 
//一共用了10s
[root@localhost1 data]#bash whiletest.sh
您一共用了10秒!




#求1-100的累加值
vim leijia.sh

sum=0
for i in {1..100}
do
sum=$(($i+$sum))
done
echo"1-100的累加值为$sum"



# 99乘法表
for i in {1..9}
do
echo -ne "$i*$j=$(($i+$j))"\t
done
echo
done

常用转义字符
echo -n 表示不换行输出
echo -e 输出转义字符,将转义后的内容输出到屏幕上 echo -ne
只有加了-e才能执行下面的转义符
常用的转义字符如下:
\b: 转义后相当于按退格键(backspace),但前提是"\b"后面存在字符;“\b"表示删除前一个字符,”\b\b"表示删除前两个字符。
\c:不换行输出,在"\c"后面不存在字符的情况下,作用相当于 echo -n; 但是当"\c"后面仍然存在字符时,“\c"后面的字符将不会被输出。
\n: 换行,被输出的字符从”\n"处开始另起一行。
\f 换行,但是换行后的新行的开头位置连接着上一行的行尾;
\v 与\f相同;
\t 转以后表示插入tab,即横向制表符;
\r 光标移至行首,但不换行,相当于使用"\r"以后的字符覆盖"\r"之前同等长度的字符;但是当"\r"后面不存在任何字符时,“\r"前面的字符不会被覆盖
\\表示插入”"本身;

三、until 循环

1.用法和特点

重复测试某个条件,只要条件不成立则反复执行

until 条件表达式

do

    命令序列              

done

2.操作实例

//使用until循环实现数字累加
[root@localhost1 data]#vim sum.sh
#!/bin/bash
sum=0
i=1
until [ $i -gt 100 ]  --当i不大于100使会一直执行
do
  sum=$[sum + i]  --将每次执行后的i累加到sum
  let i++    --每次执行后i自加
done
  echo $sum
 
[root@localhost1 data]#bash sum.sh
5050

四、循环控制语句

循环一般会搭配条件判断语句和流程控制语句一起执行,那么就会出现需要跳过循环和中止循
环的情况,控制循环的命令有以下3个

1、continue

继续,但不会执行循环体内下面的代码了,开始重新开始下一次循环。即continue是跳过当次

子循环中剩下的语句,执行下一次循环。

[root@kang mytext]# vim untilxx.sh 
#!/bin/bash
for ((i=1;i<=5;i++))
do
        if [ $i -eq 3 ];then
        continue #结果是1245,3不输出,跳出后面的echo语句执行下一次循环
 
        else
        echo $i
        fi
done
[root@kang mytext]# bash untilxx.sh 
1
2
4
5

2、break

打断,马上停止本次循环,执行循环体外的代码

[root@kang mytext]# vim untilxx.sh 
#!/bin/bash
for ((i=1;i<=5;i++))
do
        if [ $i -eq 3 ];then
        break #结果是12,3以后都不输出,终止本次循环
        else
        echo $i
        fi
done
[root@kang mytext]# bash untilxx.sh 
1
2

3、exit

直接跳出程序,后面可跟状态返回码如exit 1等等。

[root@kang mytext]# vim untilxx.sh 
#!/bin/bash
for ((i=1;i<=5;i++))
do
        if [ $i -eq 3 ];then
        exit 122  #结果是12,exit直接跳出程序,并返回返回码
        else
        echo $i
        fi
done
[root@kang mytext]# echo $?
0
[root@kang mytext]# bash untilxx.sh 
1
2
[root@kang mytext]# echo $?
122
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值