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

news2025/1/11 23:50:58

目录

一.循环语句

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.常用转义符

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙内核源码分析(任务切换篇) | 看汇编如何切换任务

在鸿蒙的内核线程就是任务&#xff0c;系列篇中说的任务和线程当一个东西去理解. 一般二种场景下需要切换任务上下文: 在线程环境下&#xff0c;从当前线程切换到目标线程&#xff0c;这种方式也称为软切换&#xff0c;能由软件控制的自主式切换.哪些情况下会出现软切换呢? 运…

Leetcode—138. 随机链表的复制【中等】(cend函数)

2024每日刷题&#xff08;129&#xff09; Leetcode—138. 随机链表的复制 实现代码 /* // Definition for a Node. class Node { public:int val;Node* next;Node* random;Node(int _val) {val _val;next NULL;random NULL;} }; */class Solution { public:Node* copyRan…

【强训笔记】day18

NO.1 思路&#xff1a;双指针模拟。to_string将数字转化为字符。 代码实现&#xff1a; class Solution { public:string compressString(string param) {int left0,right0,nparam.size();string ret;while(right<n){while(right1<n&&param[right]param[right…

我在洛杉矶采访到了亚马逊云全球首席信息官CISO(L11)!

在本次洛杉矶举办的亚马逊云Re:Inforce全球安全大会中&#xff0c;小李哥作为亚马逊大中华区开发者社区和自媒体代表&#xff0c;跟着亚马逊云安全产品团队采访了亚马逊云首席信息安全官(CISO)CJ Moses、亚马逊副总裁Eric Brandwine和亚马逊云首席高级安全工程师Becky Weiss。 …

iOS--runloop的初步认识

runloop的初步认识 简单认识runloopEvent looprunloop其实就是个对象NSRunloop和CFRunLoopRef的依赖关系runloop与线程runloop moderunloop sourceCFRunLoopSourceCFRunLoopObserverCFRunLoopTimer runloop的实现runloop的获取添加ModeCFRunLoopAddCommonMode 添加Run Loop Sou…

找不到msvcp140.dll无法执行代码的原因分析及修复方法

当用户在尝试运行某些应用程序或游戏时&#xff0c;可能会遇到系统弹出错误提示&#xff0c;显示“找不到msvcp140.dll无法执行代码”这一错误信息&#xff0c;它会导致程序无法正常启动。为了解决这个问题&#xff0c;我经过多次尝试和总结&#xff0c;找到了以下五种解决方法…

【Linux】为什么有僵尸状态,什么是僵尸进程,造成危害以及如何避免“内存泄漏”问题详解

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

C语言/数据结构——(相交链表)

一.前言 今天在力扣上刷到了一道题&#xff0c;想着和大家一起分享一下这道题——相交链表https://leetcode.cn/problems/intersection-of-two-linked-lists废话不多说&#xff0c;让我们开始今天的分享吧。 二.正文 1.1题目描述 是不是感觉好长&#xff0c;我也这么觉得。哈…

Ubuntu/Linux 安装Docker + PyTorch

文章目录 1. 提前准备2. 安装Docker2.1. 卸载冲突软件&#xff08;非必要&#xff09;2.2. 在Ubuntu系统上添加Docker的官方GPG密钥2.3. 将Docker的仓库添加到Ubuntu系统的APT源列表中2.4. 安装最新Docker2.5. 检查 3. 安装Nvidia Container Toolkit3.1. 在Ubuntu系统上添加官方…

WebRtc 视频通话,语音通话实现方案

先了解一下流程 和 流程图(chatGpt的回答) 实现 (底层代码实现, 可作为demo熟悉) 小demo <template><div><video ref"localVideo" autoplay muted></video> <!-- 本地视频元素&#xff0c;用于显示本地视频 --><video ref"r…

vivado 配置存储器支持-Artix-7 配置存储器器件

配置存储器支持 本章主要讲解 Vivado 软件支持的各种非易失性器件存储器。请使用本章作为指南 &#xff0c; 按赛灵思系列、接口、制造商、 密度和数据宽度来为您的应用选择适用的配置存储器器件。 Artix-7 配置存储器器件 下表所示闪存器件支持通过 Vivado 软件对 A…

布局全球内容生态,酷开科技Coolita AIOS以硬核品质亮相

当前&#xff0c;全球产业链供应链格局持续重构&#xff0c;成为影响中国对外经济发展的重要因素。2024年4月15至5月5日&#xff0c;历史久、规模大、层次高&#xff0c;作为中国外贸风向标的第135届中国进出口商品交易会&#xff08;即广交会&#xff09;在美丽的广州隆重举行…

mysql基础概念

文章目录 登录mysqlmysql和mysqld数据库操作主流数据库MYSQL架构SQL分类 登录mysql 登录mysql连接服务器&#xff0c;mysql连接时可以指明主机用-h选项&#xff0c;然后就可以指定主机Ip地址&#xff0c;-P可以指定端口号 -u指定登录用户 -P指定登录密码 查看系统中有无mysql&…

linux上Redis安装使用

环境centOS8 redis是缓存数据库&#xff0c;主要是用于在内存中存储数据&#xff0c;内存的读写很快&#xff0c;加快系统读写数据库的速度 一、Linux 安装 Redis 1. 下载Redis 官网下载Downloads - Redis 历史版本Index of /releases/ 本文中安装的版本为&#xff1a;h…

Oracle体系结构初探:闪回技术

在Oracle体系结构初探这个专栏中&#xff0c;已经写过了REDO、UNDO等内容。觉得可以开始写下有关备份恢复的内容。闪回技术 — Oracle数据库备份恢复机制的一种。它可以在一定条件下&#xff0c;高效快速的恢复因为逻辑错误&#xff08;误删误更新等&#xff09;导致的数据丢失…

动手学深度学习——多层感知机

1. 感知机 感知机本质上是一个二分类问题。给定输入x、权重w、偏置b&#xff0c;感知机输出&#xff1a; 以猫和狗的分类问题为例&#xff0c;它本质上就是找到下面这条黑色的分割线&#xff0c;使得所有的猫和狗都能被正确的分类。 与线性回归和softmax的不同点&#xff1…

服务丢在tomcat中启动war包,需要在tomcat中配置Java环境吗?

一般来说&#xff0c;部署在 Tomcat 上的 WAR 包启动时不需要在 Tomcat 中单独配置 Java 环境&#xff0c;因为 Tomcat 启动本身就需要依赖 Java 环境。以下是确保 Tomcat 正常运行与部署 WAR 包的基本步骤&#xff1a; 安装 Java 环境&#xff1a; 首先&#xff0c;确保你的系…

Web Component fancy-components

css-doodle 组件库 fancy-components 组件库使用 yarn add fancy-components使用&#xff1a; import { FcBubbles } from fancy-components new FcBubbles() //要用哪个就new哪个 new 这里可能会报错eslink,eslintrc.js中处理报错 module.exports {rules: {no-new: off} …

Python运维之定时任务模块APScheduler

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 目录 定时任务模块APScheduler 一、安装及基本概念 1.1、APScheduler的安装 1.2、涉及概念 1.3、APScheduler的工作流程​编辑 二、配置调度器 …