【Shell脚本】Shell编程之循环语句

目录

一.循环语句

1.for语句的结构

1.1.格式

1.2.实操案例

案例1.

案例2.

案例3.

案例4.

2.while语句的结构

2.1.格式

2.2.实操案例

案例1.

案例2.

案例3.

案例4.

3.until循环命令

3.1.格式

3.2.实操案例

案例1.

二.补充

1.常用转义符


一.循环语句

1.for语句的结构

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

1.1.格式

第一种

for 变量  in  取值列表

for i in  $(seq 1 10)
do
    命令序列
    ....
done

第二种

for ((变量=初始值; 变量范围; 变量的迭代方式))

for ((i=1; i<=10; i++))
do
    命令序列
    ....
done


for                             循环实现多线程

for ((i=1; i<=10; i++))
do
  {
    命令序列
     ....
  }&                            将每次循环的进程都放入后台自行运行
done
wait                            等待上面所有循环的进程都执行完毕后再执行后面的命令

1.2.实操案例

案例1.

批量添加用户

  • 用户名存放在users.txt文件中,每行一个初
  • 始密码均设为123456
  • 验证脚本

案例2.

计算从1到100所有整数的和

#!/bin/bash
#计算从1到100所有整数的和

sum=0
for i in {1..100};
do
    sum=$(($i+$sum))
done
    echo "$sum"

[root@localhost ~]# vim demo1.sh
[root@localhost ~]# chmod +x demo1.sh
[root@localhost ~]# ./demo1.sh
5050

案例3.

提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和

#!/bin/bash
#输入一个小于100的整数,并计算从1到该数之间所有整数的和

read -p "请输入一个小于100的整数: " num
if [ $num -eq 1 ];
then
    echo "和等于: $num"
sum=0
elif [ $num -gt 1 ]&& [ $num -lt 100 ];
then
    for ((i=l;i<=$num; i++))
do  
    let sum=$sum+$i
    done
    echo "1到$num的和为$sum"
else
    echo "输入错误"
fi

[root@localhost ~]# vim demo2.sh 
[root@localhost ~]# chmod +x demo2.sh
[root@localhost ~]# ./demo2.sh
请输入一个小于100的整数: 45
1到45的和为1035
[root@localhost ~]# ./demo2.sh
请输入一个小于100的整数: 1
和等于: 1
[root@localhost ~]# ./demo2.sh
请输入一个小于100的整数: 86
1到86的和为3741

案例4.

使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数

#!/bin/bash
#使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数


read -p "麻溜的给我输入一个0-255之间的数: " num
     for i in {1..8}
do 
     a=$[num % 2]$a
     let num=$[num / 2]
done
     echo $a

[root@localhost ~]# vim demo3.sh
[root@localhost ~]# chmod +x demo3.sh
[root@localhost ~]# ./demo3.sh
麻溜的给我输入一个0-255之间的数: 25
00011001
[root@localhost ~]# ./demo3.sh 
麻溜的给我输入一个0-255之间的数: 254
11111110
[root@localhost ~]# ./demo3.sh 
麻溜的给我输入一个0-255之间的数: 215
11010111

2.while语句的结构

  • 重复测试某个条件,只要条件成立则反复执行(相反于until)

2.1.格式

while [ 判断 ]                     条件成立时才会循环执行do里面的命令序列
do
   命令序列
let i++                            类似的语句
done

2.2.实操案例

案例1.

计算从1到100所有整数的和

#!/bin/bash
#计算从1到100所有整数的和

sum=0
i=0

while [ $i -le 100 ]
do
   sum=$[ $sum + $i ]
   i=$[ i + 1 ]
done
   echo "1-100所有整数的和为;" $sum

[root@localhost ~]# vim demo1.sh
[root@localhost ~]# bash demo1.sh
1-100所有整数的和为; 5050

案例2.

提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和

#!/bin/bash
#提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和

sum=0
i=1

read -p "麻溜的给我输入一个0-100的整数: " num
    if [ $num -le 100 ];then
       while [ $i -le $num ]
       do
          sum=$[ sum + i ]
          i=$[ i + 1 ]
       done
          echo "1-$num的和为: $sum"
       else
          echo "完蛋玩意,要输入小于100的整数"
    fi

[root@localhost ~]# vim demo2.sh
[root@localhost ~]# bash demo2.sh
麻溜的给我输入一个0-100的整数: 25
1-25的和为: 325
[root@localhost ~]# bash demo2.sh
麻溜的给我输入一个0-100的整数: 88
1-88的和为: 3916

案例3.

求从1到100所有整数的偶数和、奇数数

#!/bin/bash
#求从1到100所有整数的偶数和、奇数数

sum1=0
sum2=0
i=0

while [ $i -le 100 ]
do
   a=$[ i % 2 ]
   if [ $a -eq 0 ];then
      sum1=$[ sum1 + i ]
   else
      sum2=$[ sum2 + i ]
   fi
   let i++
done
echo "1到100的偶数和为$sum1"
echo "1到100的奇数和为$sum2"

[root@localhost ~]# vim demo3.sh
[root@localhost ~]# bash demo3.sh
1到100的偶数和为2550
1到100的奇数和为2500

案例4.

用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连>续输错

3次则报警

#!/bin/bash
#用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警
i=1
while [ $i -le 3 ]
 do
   read -p "请输入密码:" passwd
   if [ "$passwd" == "123456" ];then
    echo "密码正确"
    exit 0
   else
     echo "密码错误"
   fi
   let i++
 done
echo "警告,密码已输错三次"

[root@localhost ~]# vim demo6.sh
[root@localhost ~]# bash demo6.sh
请输入密码:52
密码错误
请输入密码:52 
密码错误
请输入密码:546
密码错误
警告,密码已输错三次
[root@localhost ~]# bash demo6.sh
请输入密码:123456
密码正确

3.until循环命令

  • 重复测试某个条件,只要条件不成立则反复执行(相反于while)

3.1.格式

until [ 条件表达式 ]                    条件不成立时才会循环执行do里面的命令序列
do
   命令序列
....
   变量的迭代方式
done

3.2.实操案例

案例1.

用until循环求1到100的和

#!/bin/bash
#用until循环求1到100的和

sum=0
i=0

until [ $i -gt 100 ]
do
 sum=$[sum+i]
 let i++
done
echo "输出1到100的和:$sum"

[root@localhost ~]# vim demo11.sh
[root@localhost ~]# bash demo11.sh
输出1到100的和:5050

二.补充

1.常用转义符

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/611439.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JAVA 双亲委派之一

JAVA 双亲委派之一 JVM类加载流程 java语言系统内置了众多类加载器&#xff0c;从一定程度上讲&#xff0c;只存在两种不同的类加载器&#xff1a;一种是启动类加载器&#xff0c;此类加载由C实现&#xff0c;是JVM的一部分&#xff1b;另一种就是所有其他的类加载器&#xf…

IF:23.2|从实验室到田间,微生物干预提高植物抗逆

期刊&#xff1a;Nature Food 影响因子&#xff1a;23.2 发表时间&#xff1a;2023年10月 本研究介绍了一种名为SynCom的微生物组合&#xff0c;该组合Rhodococcus erythropolis和Pseudomonas aeruginosa两种微生物组成。这两种微生物能够帮助水稻抵抗铝毒害和磷缺乏&…

springboot3项目练习详细步骤(第二部分:文章分类模块)

新增文章分类 接口文档 业务实现 参数校验 文章分类列表 接口文档 业务实现 获取文章分类详情 接口文档 业务实现 更新文章分类 接口文档 业务实现 分组校验 问题 概念 实现步骤 总结 删除文章分类 接口文档 业务实现 该模块大部分请求的路径相同&…

mac安装禅道

前提已安装&#xff1a;phpapacheMySQL mac安装 php7.1/apache-CSDN博客 安装MySQL 一、禅道下载 安装官方文档 源码包下载地址&#xff1a;禅道下载 - 禅道开源项目管理软件 。 1. 解压禅道源码包 2. 将解压后的文件复制到Apache访问目录下 &#xff08;默认路径为 /Libra…

【进程替换】多进程程序替换原理 | 进程程序替换函数 | execlexecv | execlpexecvp

目录 多进程程序替换 多进程程序替换原理 进程程序替换函数详解 execl&execv execlp&execvp execle&execvpe execve 多进程程序替换 我们想要进程替换的同时不影响旧的进程&#xff08;使用多进程版&#xff09;fork创建子进程&#xff0c;让子进程去替换执…

Neuralink首个脑机接口患者:打游戏、搞研究两不误,重获自主能力

今年1月28日&#xff0c;Neuralink首次将侵入式脑机接口植入人类患者Noland Arbaugh的大脑。100天后&#xff0c;这家由埃隆马斯克创立的公司公布了最新的进展。从Neuralink的更新中我们可以看到&#xff0c;Arbaugh的恢复情况超出预期&#xff0c;他的用户体验也非常积极。 原…

回溯算法—组合问题

文章目录 介绍应用问题基本流程算法模版例题&#xff08;1&#xff09;组合&#xff08;2&#xff09;电话号码的字母组合 介绍 回溯算法实际上是 一个类似枚举的搜索尝试过程&#xff0c;主要是在搜索尝试过程中寻找问题的解&#xff0c;当发现已不满足求解条件时&#xff0c;…

CSS-页面导航栏实现-每文一言(过有意义的生活,做最好的自己)

&#x1f390;每文一言 过有意义的生活,做最好的自己 目录 &#x1f390;每文一言 &#x1f6d2;盒子模型 &#x1f453;外间距 (margin) &#x1f97c;边框 &#x1f45c;内边距 切换盒子模型计算方案&#xff1a; &#x1f3a2; 浮动布局 浮动特点 &#x1f3c6;导航…

并行执行的4种类别——《OceanBase 并行执行》系列 4

OceanBase 支持多种类型语句的并行执行。在本篇博客中&#xff0c;我们将根据并行执行的不同类别&#xff0c;分别详细阐述&#xff1a;并行查询、并行数据操作语言&#xff08;DML&#xff09;、并行数据定义语言&#xff08;DDL&#xff09;以及并行 LOAD DATA 。 《并行执行…

Docker部署Metabase

文章目录 Docker安装MetabaseCentOS7安装Docker获取最新的 Docker 镜像启动Metabase容器在Metabase初始化时查看日志访问Metabase Metabase 的 ClickHouse 驱动程序安装环境简介删除容器创建容器下载click house驱动放入驱动重启容器将元数据库连接到 ClickHouse报错解决 Docke…

轻松管理文件夹批量重命名:学会用关键词批量替换文件夹名称技巧

随着计算机中存储的文件和文件夹数量不断增加&#xff0c;如何有效地管理和组织它们变得尤为重要。批量重命名文件夹是提升文件管理效率的关键步骤之一。而利用云炫文件管理器中关键词批量替换文件夹名称的技巧&#xff0c;则可以帮助我们更快速地完成这一任务。 关键词批量替…

LeetCode例题讲解:876.链表的中间结点

给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,5] 解释&#xff1a;链表只有一个中间结点&#xff0c;值为 3 。…

KMeans,KNN,Mean-shift算法的学习

1.KMeans算法是什么&#xff1f; 在没有标准标签的情况下&#xff0c;以空间的k个节点为中心进行聚类&#xff0c;对最靠近他们的对象进行归类。 2.KMeans公式&#xff1a; 2. 1.关键分为三个部分&#xff1a; 1.一开始会定义n个中心点&#xff0c;然后计算各数据点与中心点…

浅谈云计算资源和服务

目录 前言 正文 专有名词及其首字母缩写 轻量级应用服务器 云服务器ECS 专有网络VPC 其他类服务 尾声 &#x1f52d; Hi,I’m Pleasure1234&#x1f331; I’m currently learning Vue.js,SpringBoot,Computer Security and so on.&#x1f46f; I’m studying in University o…

如何用Python创建目录以及自动创建缺失的父目录

在Python中&#xff0c;创建目录&#xff08;也称为文件夹&#xff09;是一个常见的任务&#xff0c;尤其是当你需要为文件系统上的某些文件创建存储位置时。幸运的是&#xff0c;Python的os模块提供了一个非常方便的函数os.makedirs()&#xff0c;它允许你创建一个目录&#x…

【AMBA Bus ACE 总线 8 -- ICache maintenance】

请阅读【AMBA Bus ACE 总线与Cache 专栏 】 欢迎学习:【嵌入式开发学习必备专栏】 文章目录 ACE ICache maintenanceACE ICache maintenance 图 1-1 当一个OS run 多个cpu的时候,根据调度算法的不同,OS 可以根据调度算法的不同分别 run 在某个具体的CPU上,因此,它们会有…

计算图与自动微分

计算图与自动微分 一、自动梯度计算1.1 数值微分&#xff08;Numerical Differentiation&#xff09;1.2 符号微分&#xff08;Symbolic Differentiation&#xff09;1.3 自动微分&#xff08;Automatic Differentiation&#xff0c;AD&#xff09;1.3.1 计算图1.3.2 正向传播1…

java技术总结

1.java基本数据类型? byte 1,short 2 ,int 4,long 8 ,float 4,double 8,boolean 1,char 2 2.java为什么要有包装类型? 前 6 个类派生于公共的超类 Number,而 Character 和 Boolean 是 Object 的直接子类。 被 final 修饰, Java 内置的包装类是无法被继承的。 包装…

FreeRTOS标准库例程代码

1.设备STM32F103C8T6 2.工程模板 单片机: 部分单片机的程序例程 - Gitee.comhttps://gitee.com/lovefoolnotme/singlechip/tree/master/STM32_FREERTOS/1.%E5%B7%A5%E7%A8%8B%E6%A8%A1%E6%9D%BF 3.代码 1-FreeRTOS移植模板 #include "system.h" #include "…

腾讯云coding代码托管平台配置问题公钥拉取失败提示 Permission denied(publickey)

前言 最近在学校有个课设多人开发一个游戏&#xff0c;要团队协作&#xff0c;选用了腾讯云的coding作为代码管理仓库&#xff0c;但在配置的时候遇到了一些问题&#xff0c;相比于github&#xff0c;发现腾讯的coding更难用&#xff0c;&#xff0c;&#xff0c;这里记录一下…