【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命令序列....
donefor                             循环实现多线程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};
dosum=$(($i+$sum))
doneecho "$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 ];
thenecho "和等于: $num"
sum=0
elif [ $num -gt 1 ]&& [ $num -lt 100 ];
thenfor ((i=l;i<=$num; i++))
do  let sum=$sum+$idoneecho "1到$num的和为$sum"
elseecho "输入错误"
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之间的数: " numfor i in {1..8}
do a=$[num % 2]$alet num=$[num / 2]
doneecho $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=0while [ $i -le 100 ]
dosum=$[ $sum + $i ]i=$[ i + 1 ]
doneecho "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=1read -p "麻溜的给我输入一个0-100的整数: " numif [ $num -le 100 ];thenwhile [ $i -le $num ]dosum=$[ sum + i ]i=$[ i + 1 ]doneecho "1-$num的和为: $sum"elseecho "完蛋玩意,要输入小于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=0while [ $i -le 100 ]
doa=$[ i % 2 ]if [ $a -eq 0 ];thensum1=$[ sum1 + i ]elsesum2=$[ sum2 + i ]filet 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 ]doread -p "请输入密码:" passwdif [ "$passwd" == "123456" ];thenecho "密码正确"exit 0elseecho "密码错误"filet 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=0until [ $i -gt 100 ]
dosum=$[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.mzph.cn/bicheng/9852.shtml

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

相关文章

56 关于 linux 的 oom killer 机制

前言 这里主要讲的是 linux 的 oom killer 机制 在系统可用内存较少的情况下&#xff0c;内核为保证系统还能够继续运行下去&#xff0c;会选择杀掉一些进程释放掉一些内存。 通常oom_killer的触发流程是&#xff1a;进程A想要分配物理内存&#xff08;通常是读写内存&#…

笨方法自学python(九)-读写文件

读取文件 前面已经学过了 input 和 argv&#xff0c;这些是你开始学习读取文件的必备基础。你可能需要多多实验才能明白它的工作原理&#xff0c;这节练习涉及到写两个文件。一个正常的 ex15.py 文件&#xff0c;另外一个是 ex15_sample.txt&#xff0c;第二个文件并不是脚本&…

图像锐化——非锐化掩膜USM和锐化掩膜SM(附代码)

非锐化掩膜 (USM) 和锐化掩膜 (SM) 都是常用的图像锐化技术。它们都可以通过增强图像的边缘信息来提高图像的清晰度。 目录 一、非锐化掩膜USM1.1 USM原理1.2 USM实现步骤1.3 优点1.4 代码 二、锐化掩膜SM2.1 SM原理2.2 SM实现步骤2.3 优点2.4 代码 三、锐化效果四、总结4.1 效…

Qt三方库:QuaZIP介绍、编译和使用

前言 Qt使用一些压缩解压功能&#xff0c;探讨过libzip库&#xff0c;zlib库&#xff0c;libzip库比较原始&#xff0c;还有其他库&#xff0c;都比较基础&#xff0c;而在基础库之上&#xff0c;又有高级封装库&#xff0c;Qt中的QuaZIP是一个很好的选择。Quazip是一个用于压缩…

5.11学习记录

20长安杯部分 检材 1 的操作系统版本 CentOS Linux 7.6.1810 (Core) 检材 1 中&#xff0c;操作系统的内核版本是 3.10.0-957.el7.x86_64 检材 1 中磁盘包含一个 LVM 逻辑卷&#xff0c;该 LVM 开始的逻辑区块地址&#xff08;LBA&#xff09;是 2099200 物理卷&#xff…

20240510每日后端---聊聊文件预览,doc,image,ppt转PDF预览

一、引入依赖 <dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>15.8</version></dependency><dependency><groupId>com.aspose</groupId><artifactId>crac…

(Mac)RocketMQ的本地安装测试(详细图示)

目录 部署服务 namesrv / broker下载解压缩运行 namesrvnohup ./bin/mqnamesrv & 启动命令详解运行 broker 测试收发消息运行自带的生产者测试类运行自带的消费者测试类 部署 Dashboard 可视化下载打包运行访问 部署服务 namesrv / broker 下载解压缩 官网下载 https://r…

mac苹果电脑卡顿反应慢如何解决?2024最新免费方法教程

苹果电脑以其稳定的性能、出色的设计和高效的操作系统&#xff0c;赢得了广大用户的喜爱。然而&#xff0c;随着时间的推移&#xff0c;一些用户会发现自己的苹果电脑开始出现卡顿、反应慢等问题。这不仅影响使用体验&#xff0c;还会影响工作效率。那么&#xff0c;面对这些问…

FPGA -手写异步FIFO

一&#xff0c;FIFO原理 FIFO&#xff08;First In First Out&#xff09;是一种先进先出的数据缓存器&#xff0c;没有外部读写地址线&#xff0c;使用起来非常简单&#xff0c;只能顺序写入数据&#xff0c;顺序的读出数据&#xff0c;其数据地址由内部读写指针自动加1完成&a…

win10无法被远程桌面连接,Win10系统无法被远程桌面连接的原因有哪些

win10无法被远程桌面连接&#xff0c;Win10系统无法被远程桌面连接的原因有哪些&#xff1f; 先&#xff0c;我们需要明确Win10系统无法被远程桌面连接的可能原因。其中&#xff0c;最常见的原因包括&#xff1a;远程桌面功能未启用、网络连接问题、防火墙或安全软件设置不当、…

哪个牌子的电视盒子好用?小编分享最新电视盒子排名

最近电视盒子是大家热议的话题&#xff0c;就目前来看它的地位依然无可替代&#xff0c;但许多朋友硬不知道哪个牌子的电视盒子好用&#xff0c;面对众多品牌和产品究竟要如何选择才是最好的呢&#xff1f;本期小编要分享最新发布的电视盒子排名&#xff0c;看看哪些电视盒子最…

C++ 抽象与封装

一 抽象 抽象实例&#xff1a;时钟 数据抽象&#xff1a; 具有表面当前时间的时、分、秒 行为抽象&#xff1a; 具有设置时间和显示时间两个最基本的功能。 抽象实例&#xff1a;人 数据抽象&#xff1a;姓名、年龄、性别等。 行为抽象&#xff1a; 生物属性&#xff1a;吃…

【线性代数】英语版听课笔记

线性代数 - 北京航天航空大学&#xff08;英文版&#xff09;_哔哩哔哩_bilibili 39.concept of vector space in this lecture we will studyvector space&#xff0c; the concept of basis dimension and coordinates 向量空间的维数&#xff1a;向量空间的基底所含向量的…

TCP超时重传机制

一、TCP超时重传机制简介 TCP超时重传机制是指当发送端发送数据后&#xff0c;如果在一定时间内未收到接收端的确认应答&#xff0c;则会认为数据丢失或损坏&#xff0c;从而触发重传机制。发送端会重新发送数据&#xff0c;并等待确认应答。如果在多次重传后仍未收到确认应答&…

车载测试__公司面试题(整理)

案例1&#xff1a; 镁佳 外包岚图汽车 车载测试 区域经理视频面试 1.首先自我介绍一下 2.项目是怎么测的举例说明 3.你是怎么看待加班的 4.你是怎么看待驻场单位 5.是否可以接受外派去做一段时间的技术支持&#xff0c;比如去襄阳&#xff0c;最长一个月。 6.多快能到…

Codigger:优化Vim编辑器的关键是可视化

Vim是一款高度灵活的文本编辑器&#xff0c;以其高效的快捷键和命令行界面而闻名。然而&#xff0c;对于一些初学者来说&#xff0c;Vim的复杂性和强大的功能可能会让他们感到困惑。为了使Vim更易于使用&#xff0c;Codigger引入可视化操作的概念&#xff0c;将原本抽象的、难以…

智慧公厕,运用数据提升公共厕所管理水平!

随着城市人口的增加和生活水平的提高&#xff0c;公共厕所的管理变得越来越重要。传统的厕所管理方式已经无法满足人们对卫生、便利和舒适的需求。而智慧公厕作为新一代公厕管理方式&#xff0c;通过运用数据技术和大数据分析手段&#xff0c;彻底改变了公厕管理的模式&#xf…

C++对象的赋值

同类的对象之间可以互相赋值&#xff0c;即一个对象的值可以赋值给另一个对象。对象之间的赋值通过“”进行。默认就是把一个对象所有非static数据成员的值依次赋值给另一个对象。 对象赋值的一般形式为&#xff1a; 对象名1 对象名2; 注意:对象名1和对象名2必须是属于同一个…

flutter开发实战-GetX响应式状态管理使用

flutter开发实战-GetX响应式状态管理使用 GetX是一个简单的响应式状态管理解决方案。GetX是Flutter的一款超轻、功能强大的解决方案。它将高性能状态管理、智能依赖注入和路由管理快速而实用地结合在一起。这里简单使用一下GetX 一、引入GetX 在工程的pubspec.yaml中引入插件…

信息系统架构模型_1.单机应用模式和客户机/服务器模式

1.单机应用模式&#xff08;Standalone&#xff09; 单机应用系统是最简单的软件结构&#xff0c;是指运行在一台物理机器上的独立应用程序。这些软件系统&#xff0c;从今天的软件架构上来讲&#xff0c;是很简单&#xff0c;是标准的单机系统。当然至今&#xff0c;这种复杂的…