Shell编程循环语句(for、while、until)

news/2024/7/21 14:34:44 标签: vim, linux, 编辑器

目录

一、for 循环

1.用法和特点

2.执行指定次数

3.遍历和迭代

(1)遍历

(2)迭代

4.操作实例

二、 while 循环

1.用法和特点

2.操作实例

三、until 循环

1.用法和特点

2.操作实例


一、for 循环

1.用法和特点

读取不同的变量值,用来逐个执行同一组命令

for循环经常使用在已经知道要进行多少次循环的场景

img编辑

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

img编辑

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秒!

三、until 循环

1.用法和特点

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

img编辑

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


http://www.niftyadmin.cn/n/420247.html

相关文章

chatgpt赋能python:Python怎么升序排序

Python怎么升序排序 排序是我们经常会用到的一种操作&#xff0c;而在Python中&#xff0c;对于列表或数组等序列类型的数据&#xff0c;我们可以使用内置的sorted()函数来进行排序操作。而在排序时&#xff0c;升序排序是我们最常用的一种。 Python中的sorted()函数 sorted…

Scrapy爬取数据,使用Django+PyEcharts实现可视化大屏

项目介绍 使用Scrapy进行数据爬取&#xff0c;MySQL存储数据&#xff0c;Django写后端服务&#xff0c;PyEcharts制作可视化图表&#xff0c;效果如下。 项目下载地址&#xff1a;Scrapy爬取数据&#xff0c;并使用Django框架PyEcharts实现可视化大屏 发现每个模块都有详情页…

【模块三:职业成长】36|能力维度一:如何提升结构化设计的能力?

你好&#xff0c;我是郭东白。 上节课我们定义了架构师这个角色&#xff0c;也了解了架构师的五个成长阶段&#xff0c;分别是程序员、兼职架构师、跨域架构师、总架构师和 CTO。以及与这五个阶段分别对应的核心能力&#xff0c;即&#xff1a;结构化设计能力、解决横向问题的…

Hive/Presto中函数grouping sets用法详解(踩坑总结,看到赚到)

目录 1. 问题讨论1.1 数据准备1.2 问题描述1.3 其它方法多维度聚合&#xff08;union、with cube&#xff09; 2. Hive中的grouping sets函数2.1 grouping sets方法多维度聚合2.2 grouping sets在联结join中使用的踩坑点2.3 grouping sets函数使用补充事项2.4 计算grouping__id…

【华为OD统一考试B卷 | 100分】关联子串(C++ Java JavaScript Python)

题目描述 给定两个字符串str1和str2, str1进行排列组合只要有一个为str2的子串则认为str1是str2的关联子串, 请返回子串在str2的起始位置,若不是关联子串则返回-1 输入描述 无 输出描述 无 ACM输入输出模式 如果你经常使用Leetcode,会知道letcode是不需要编写输入输出函…

【华为OD统一考试B卷 | 100分】矩形相交的面积(C++ Java JavaScript Python)

题目描述 给出3组点坐标(x, y, w, h),-1000<x,y<1000,w,h为正整数。(x, y, w, h)表示平面直角坐标系中的一个矩形:x, y为矩形左上角坐标点,w, h向右w,向下h。(x, y, w, h)表示x轴(x, x+w)和y轴(y, y-h)围成的矩形区域;(0, 0, 2, 2)表示 x轴(0, 2)和y 轴(0, -2)围成…

什么是Vue的Virtual DOM,如何使用?

什么是Vue的Virtual DOM&#xff0c;如何使用&#xff1f; Vue是一款流行的JavaScript框架。它采用了Virtual DOM的概念来提高应用程序的性能和响应能力。本文将介绍Vue的Virtual DOM是什么&#xff0c;以及如何使用它来构建更快的Vue应用程序。 什么是Vue的Virtual DOM&#…

202316读书笔记|《作家榜名著:花间集》——花半坼,雨初晴,满身香雾簇朝霞,娇艳轻盈香雪腻

202316读书笔记|《作家榜名著&#xff1a;花间集》——花半坼&#xff0c;雨初晴&#xff0c;满身香雾簇朝霞&#xff0c;娇艳轻盈香雪腻 《作家榜名著&#xff1a;花间集》作者赵崇祚 房开江。这里有绮丽的艳词&#xff0c;缱绻的缠绵&#xff0c;温婉绵延的思愁。或慵懒梳洗迟…