【Shell】shell编程之循环语句

news2024/9/20 6:15:05

目录

1.for循环

例题

2.while循环

例题

3.until循环

1.for循环

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

for 变量 in 取值列表

do

        命令序列

done

[root@localhost ~]# for i in 1 2 3
> do
> echo "第 $i 次跳舞"
> done
第 1 次跳舞
第 2 次跳舞
第 3 次跳舞
[root@localhost ~]#




[root@localhost ~]# for i in {1..3}
> do
> echo $i
> done
1
2
3
[root@localhost ~]#

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

do

        命令序列

done

[root@localhost ~]# for ((i=1;i<=10;i++))
> do
> echo $i
> done
1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# echo $i
11
[root@localhost ~]#

例题

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

#!/bin/bash
#计算从1到100所有整数的和
sum=0
for ((i=1;i<=100;i++))
{
  sum=$[ sum + $i ]
}
echo "1到100的和为 $sum"

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

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

# 提示用户输入一个小于100的整数
read -p "请输入一个小于100的整数:" number

# 初始化求和变量为0
sum=0

# 使用for循环计算从1到用户输入数字的整数和
for (( i=1; i<=$number; i++ )); do
    sum=$((sum + i))
done

# 输出结果
echo "从1到 $number 的所有整数的和为:$sum"

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

#!/bin/bash  
#求从1到100所有整数的偶数和、奇数和
  
# 初始化偶数和奇数的和为0  
sum_even=0  
sum_odd=0
  
# 使用for循环遍历从1到100的所有整数
for i in {1..100}  
do  
    # 检查当前数字是偶数还是奇数  
    if (( $i % 2 == 0 )); then  
        # 如果是偶数,则加到偶数和上  
        sum_even=$((sum_even + i))  
    else  
        # 如果是奇数,则加到奇数和上  
        sum_odd=$((sum_odd + i))  
    fi  
done  
  
# 输出结果  
echo "从1到100的所有整数的偶数和为:$sum_even"  
echo "从1到100的所有整数的奇数和为:$sum_odd"

4、检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中

#!/bin/bash
#检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中

for num in {0..255}
do
  {
    hostip="192.168.10.$num"
    ping -c 4 -i 0.5 -W 2 $hostip &> /dev/null
    if [ $? -eq 0 ];then
       echo "$hostip is online" >> /root/host_ip
    fi
  }&
done
wait
cat /root/host_ip

5、用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警

#!/bin/bash
#用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警

for i in {1..3}
do
  read -p "请输入密码" passwd
  if [ "$passwd" == "123456" ];then
    echo "密码正确"
	exit
	else
	echo "密码错误"
  fi
done
  echo  "报警"

6、编写能够自动生成一个6位随机密码的脚本

#!/bin/bash
#编写能够自动生成一个6位随机密码的脚本

STR="0123456789qwertyuiopasdfghjklzxcvbnm"

for ((i=1;i<=6;i++))
do
  num=$[RANDOM % ${#STR}]
  passwd=${STR:num:1}

  password+=$passwd
done

echo "6位随机密码为 $password"

2.while循环

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

[root@localhost ~]# a=1
[root@localhost ~]# while [ $a -le 10 ]
> do
> echo $a
> let a++
> done
1
2
3
4
5
6
7
8
9
10
[root@localhost ~]#

例题

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

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

a=1
sum=0
while [ $a -le 100 ]
do
  sum=$[ sum + $a ]
  let a++
done

echo "1到100的和为 $sum"

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

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

a=1
sum=0
read -p "请输入一个小于100的整数:" num

if [ $num -ge 1 ] && [ $num -le 100 ];then

while [ $a -le $num ]
do
  let sum+=a
  let a++
done

echo "从1到该数之间所有整数的和为:$sum "
else
  echo "输入有误!"
fi

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

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

a=1

jisum=0
ousum=0
while [ $a -le 100 ]
do
  b=$[ a % 2 ]
  if [ $b -eq 0 ];then
    let ousum+=$a
  else
    let jisum+=$a
  fi
  let a++
done

echo -e "从1到100的所有整数的偶数和为:$ousum\n 奇数和为:$jisum"  

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 "输错三次,报警"

5、编写能够自动生成一个6位随机密码的脚本

#!/bin/bash
#编写能够自动生成一个6位随机密码的脚本

i=0
STR="0123456789qwertyuiopasdfghjklzxcvbnm"

while [ $i -lt 6 ]
do
  num=$[RANDOM % ${#STR}]
  passwd=${STR:num:1}
  password+=$passwd

let i++
done
echo "6位随机密码为 $password"

3.until循环

until 语句,它与 while 不同之处在于,是当条件表达式为 false 时才循环,实际使用中比较少 

until [ $i -gt 10 ];do
  echo $i
  let i++
  sum=$(($sum+$i))
done

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

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

相关文章

java基础之面向对象的思想

一、面向对象和面向过程的编程思想对比 面向过程&#xff1a;是一种以过程为中心的编程思想&#xff0c;实现功能的每一步&#xff0c;都是自己实现的&#xff08;自己干活&#xff09;。 面向对象&#xff1a;是一种以对象为中心的编程思想&#xff0c;通过指挥对象实现具体的…

5. 简单说一说uniapp中的语法吧

前言 如果你 知道Vue3并且对Vue3的语法有一定了解&#xff0c;请跳过这一章&#xff0c;由于后续项目主要是基于Vue3TypeScript&#xff0c;因此提前简单概述一些Vue3的基础语法~ 本文的目的是 期望通过对本文的阅读后能对Vue3的每个语法有一个简单的印象&#xff0c;至少要知…

【Linux】动态库与静态库的底层比较

送给大家一句话&#xff1a; 人生最遗憾的&#xff0c;莫过于&#xff0c;轻易地放弃了不该放弃的&#xff0c;固执地坚持了不该坚持的。 – 柏拉图 (x(x_(x_x(O_o)x_x)_x)x) (x(x_(x_x(O_o)x_x)_x)x) (x(x_(x_x(O_o)x_x)_x)x) 底层比较 1 前言2 编译使用比较2 如何加载Than…

连升三级!openGauss单机版从2.1.0经停3.0.0升级至5.0.0

前言 如前文所述&#xff0c;我们的小demo项目起初安装了openGauss的2.1.0版本&#xff0c;由于2.1.0不是长期维护&#xff08;LTS&#xff09;版本&#xff0c;所以要升级到5.0.0LTS。考虑到虽然是DEMO项目&#xff0c;但也有些体验用户&#xff0c;所以为了保障业务连续性&a…

网络基础-Telnet协议

Telnet&#xff08;Telecommunication Network&#xff09;是一种基于文本的远程终端协议&#xff0c;允许用户通过网络连接到远程计算机&#xff0c;并在远程计算机上执行命令&#xff1b;它使用TCP作为传输层协议&#xff0c;并依赖于网络连接在客户端和服务器之间进行通信&a…

商务分析方法与工具(九):Python的趣味快捷-Pandas处理公司财务数据集思路

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

Linux部署

先把需要的东西准备好&#xff1a; 第一步解压tomcat&#xff1a; tar -zxvf apache-tomcat-8.5.20.tar.gz 第二步解压jdk: tar -zxvf jdk-8u151-linux-x64.tar.gz 第三步配置Java环境变量&#xff1a; vim /etc/profile 把下面代码放进去&#xff1a; export JAVA_HOME/root…

定时任务的几种实现方式

定时任务实现的几种方式&#xff1a; 1、JDK自带 &#xff08;1&#xff09;Timer&#xff1a;这是java自带的java.util.Timer类&#xff0c;这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行&#xff0c;但不能在指定时间运行。…

基于SpringBoot+Vue社区老人健康信息管理系统

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统社区老人健康信息管理系统信息管理难度大&#xff0c;容错…

网络爬虫概述与原理

网络爬虫概述与原理 网络爬虫简介狭义上理解功能上理解常见用途总结 网络爬虫分类通用网络爬虫聚焦网络爬虫增量网络爬虫深度网络爬虫 网络爬虫流程网络爬虫采集策略深度有限搜索策略广度优先搜索策略 网络爬虫简介 通过有效地获取网络资源的方式&#xff0c;便是网络爬虫。网…

【SpringBoot】解锁后端测试新境界:学习Mockito与MockMvc的单元测试魔法

文章目录 前言&#xff1a;Java常见的单元测试框架一.Junit5基础二.SpringBoot项目单元测试1.添加依赖2.SpringBoot单元测试标准结构3.SpringBoot单元测试常用注解 三.单元测试中如何注入依赖对象1.真实注入&#xff08;AutoWired、 Resource&#xff09;2.Mock注入2.1.前言2.2…

数据结构复习指导之树、森林

文章目录 树、森林 考纲内容 复习提示 1.树的存储结构 1.1双亲表示法 1.2孩子表示法 1.3孩子兄弟表示法 2.树、森林、与二叉树的转换 2.1树转换为二叉树 2.2森林转换为二叉树 2.3二叉树转换为森林 3.树和森林的遍历 3.1树的遍历 3.2森林的遍历 树、森林 考纲内容…

开源推荐榜【FunClip是一款完全开源、本地部署的自动化视频剪辑工具】

FunClip是一款完全开源、本地部署的自动化视频剪辑工具&#xff0c;通过调用阿里巴巴通义实验室开源的FunASR Paraformer系列模型进行视频的语音识别&#xff0c;随后用户可以自由选择识别结果中的文本片段或说话人&#xff0c;点击裁剪按钮即可获取对应片段的视频&#xff08;…

zookeeper安装集群模式

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 ZooKeeper是一个分…

JeeSite V5.7.0 发布,Java快速开发平台,Vite5、多项重构重磅升级

JeeSite V5.7.0 发布&#xff0c;Java快速开发平台&#xff0c;Vite5、多项重构重磅升级 升级内容 新增 参数配置 IP 地址黑白名单过滤器动态参数 新增 侧边栏是否展开第一个菜单的开关 first-open 新增 AesTypeHandler 处理字段数据加密解密或脱敏 新增 JsonTypeHandler …

247 基于matlab的梁的振型仿真

基于matlab的梁的振型仿真。利用有限元理论&#xff0c;求二维梁的固有频率和振型。短边固定&#xff0c;给定长度、横截面积&#xff0c;弹性模量及材料密度已知。并对比理论计算结果进行分析。各参数自己设定。程序已调通&#xff0c;可直接运行。 247 梁的振型仿真 固有频率…

Linux环境下parted工具使用

在工作中&#xff0c;我们经常会遇到大于分区大于2T的磁盘&#xff0c;由于系统盘最大不能超2T&#xff0c;我们会在做raid时将划分VD来进行装系统&#xff0c;但系统自动安装后无法将磁盘全部识别出来&#xff0c;管理员有时会要求手动对分区进行挂载&#xff0c;这个文档介绍…

收放卷伺服控制系统详细算法介绍(电子齿轮+张力PID卷绕轴控制功能块)

收放卷控制系统涉及的内容非常多,这里我们介绍全伺服系统利用电子齿轮指令实现主从轴的比例随动速度控制,收放卷控制算法介绍常用链接如下 1、收放卷+排线控制 收放卷+排线控制系统框图-CSDN博客文章浏览阅读24次。1、收放卷前馈量计算FC收放卷前馈量计算FC(CODESYS ST源代…

将python库下载到本地安装—Pypi官网wheel版本选择详解—小白详解版

python库—本地安装文件下载&#x1f680; 在项目中需要在内网环境下配置python的环境&#xff0c;因此需要将用于安装python库的文件下载到本地传到内网环境当中然后再安装&#xff0c;通过这契机我开始了解了一下如何离线下载安装python的第三方库&#xff0c;以及配置本地的…

【Docker】Ubuntu下Docker的基本使用方法与常用命令总结

【Docker】docker的基本使用方法 镜像image与容器container的关系基本命令- 查看 Docker 版本- 拉取镜像- 查看系统中的镜像- 删除某个镜像- 列出当前 Docker 主机上的所有容器&#xff0c;包括正在运行的、暂停的、已停止的&#xff0c;以及未运行的容器- 列出当前 Docker 主机…