shell循环

一、for循环

 用法:

for 变量 in 取值列表

do

        命令序列

done

例1:打印1到10的数字列表

#!/bin/bashfor i in {1..10}
do
echo $i
done

 例2:#批量添加用户,用户名存放在users.txt文件中,每行一个,初始密码均设为123456

#!/bin/bashuserfile=/root/users.txtfor name in $(cat $userfile)
douseradd $nameecho 123456 | passwd --stdin $name &> /dev/null
done echo "批量添加用户完成"

 例3:

根据IP地址检查主机状态 IP地址存放在ipadds.txt文件中,每行一个 使用ping命令检测各主机的连通性

#!/bin/bash
#根据IP地址检查主机状态 IP地址存放在ipadds.txt文件中,每行一个 使用ping命令检测各主机的连通性
filepath=/root/for/ipadds.txtfor hostip in $(cat $filepath)
doping -c 4 -i 0.5 -W 2 $hostip &> /dev/nullif [ $? -eq 0 ];thenecho "$hostip is online" >> /root/for/result.txtelseecho "$hostip is offline">> /root/for/result.txtfi
done

例4:

根据IP地址检查主机状态 使用ping命令检测 192.168.80.10 20 30 40 50 60主机的连通性

#!/bin/bash
#根据IP地址检查主机状态 使用ping命令检测 192.168.80.10 20 30 40 50 60主机的连通性for num in {1..6}
dohostip="192.168.80.${num}0"ping -c 4 -i 0.5 -W 2 $hostip &> /dev/nullif [ $? -eq 0 ];thenecho "$hostip is online"elseecho "$hostip is offline"fi
done

例5:

输出1到10的整数,并判断奇偶数

#!/bin/bash
#输出1到10的整数,并判断奇偶数for ((i=1; i<=10; i++))
doa=$[i % 2]if [ $a -eq 1 ];thenecho "$i 为奇数"   elseecho "$i 为偶数"fidone

例6:

根据IP地址检查主机状态 使用ping命令检测 192.168.80.0~255 的主机,获取在线的主机清单

#!/bin/bash
#根据IP地址检查主机状态 使用ping命令检测 192.168.80.0~255 的主机,获取在线的主机清单for num in {0..255}
do{hostip="192.168.80.$num"ping -c 4 -i 0.5 -W 2 $hostip &> /dev/nullif [ $? -eq 0 ];thenecho "$hostip is online" >> /root/host.txtfi}&
done
wait
cat /root/host.txt

例7:

输出1到10的整数,并判断奇偶数

#!/bin/bash
#输出1到10的整数,并判断奇偶数for ((i=1; i<=10; i++))
doa=$[i % 2]if [ $a -eq 1 ];thenecho "$i 为奇数"   elseecho "$i 为偶数"fidone

例8:

求1到10的和

#!/bin/bash
#求1到10的和
sum=0
for ((i=1; i<=10; i++))
{sum=$[sum + $i] 
}
echo "1到10的和为 $sum"

例9:

输出PATH环境变量的目录里所有以xy开头的文件

#!/bin/bash
#输出PATH环境变量的目录里所有以xy开头的文件IFS_OLD=$IFS
IFS=$IFS':'for i in $PATH
do#ls $i/xy* 2> /dev/nullfind $i -name "xy*" -print 2> /dev/null
done

例10:

求裴波拉切数:1,1,2,3,5,8,13,21,34,55,89...,数列从第3项开始每一项等于前两项之和,打印前10个元素

#!/bin/bash
#求裴波拉切数:1,1,2,3,5,8,13,21,34,55,89...,数列从第3项开始每一项等于前两项之和,打印前10个元素first=1
second=1for ((i=1; i<=10; i++))
doecho $firstC=$[first + second]first=$secondsecond=$C
done

例11:

自动生成一个8位数的随机密码,密码范围可以是小大写字母和数字

#!/bin/bash
#自动生成一个8位数的随机密码,密码范围可以是小大写字母和数字STR="0123456789shicaijundashuaigeABCDEFGHIJKLMNOPQRSTUVWXYZ"for ((i=1; i<=8; i++))
do#获取字符串所有下标的随机数num=$[RANDOM % ${#STR}]#根据随机下标获取一个随机字符passd=${STR:num:1}#将随机字符进行拼接password+=$passddoneecho "8位随机密码为 $password"

 例12

用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;用户存在但没设密码,则提示用户并让用户设置密码:若该用户不存在,提示用户输入密码,建立用户并设立其密码
 

#!/bin/bash
#用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;用户存在但没设密码,则提示用户并让用户设置密码:若该用户不存在,提示用户输入密码,建立用户并设立其密码usrfile=/root/users.txt
#循环遍历文件里的每行用户
for iname in $(cat $usrfile)
do#判断是否存在grep "^$iname" /etc/passwd &> /dev/nullif [ $? -eq 0 ];thenecho "$iname 用户已存在"#判断用户是否设置密码userpasswd=$(cat /etc/shadow | grep "^$iname" | awk -F: '{print $2}')if [ "$userpasswd" == "!!" ] || [ "$userpasswd" == "*" ] || [ -z "$userpasswd" ];thenecho "$iname 用户没设密码。"read -p "请设置 $iname 用户的密码:" pd1read -p "请确认设置 $iname 用户的密码:" pd2if [ "$pd1" == "$pd2" ];thenecho $pd1 | passwd --stdin $iname &> /dev/nullelseecho "密码输入不正确,放弃设置...."   fifi  else#创建不存在的用户并设置密码echo "$iname 用户不存在,正常创建用户....."read -p "请设置 $iname 用户的密码:" password1read -p "请确认设置 $iname 用户的密码:" password2if [ "$password1" == "$password2" ];thenuseradd $inameecho $password1 | passwd --stdin $iname &> /dev/nullelseecho "密码输入不正确,放弃设置...."   fifi
done

二、while循环

格式:

 while 条件测试操作

 do    

命令序列

 done

例1: 

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

#!/bin/bash
read -p "请输入一个100以内的数:" ia=1
sum=0
if [ $i -ge 1 ] && [ $i -le 100 ];thenwhile [ $a -le $i ]dolet sum+=alet a++doneecho "1到$i的总和为$sum"
elseecho "重新输入"
fi

例2:

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

#!/bin/bash
a=1
oddsum=0
evensum=0while [ $a -le 100 ]
do          b=$[ a%2 ] if [ $b -eq 0 ];thenlet evensum+=$aelse    let oddsum+=$afi         let a++
done
echo " 奇数为$oddsum,偶数为$evensum"

例3:

测试指定范围主机是否通信,并将通信主机的Ip写到host_ip文件中

#!/bin/basha=100
while [ $a -le 104 ]
dohostip=192.168.10.$aping -c 2 -i 0.5 -w 2 $hostip &> /dev/nullif [ $? -eq 0 ];thenecho "$hostip 在线" >> /root/host_ipfilet a++
donecat /root/host_ip

例4:

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

#!/bin/bashi=0
while [ $i -le 2 ]
doread -p "输入密码:" passwordif [ $password == 123456 ];thenecho "密码正确"exit 0 else     echo "密码错误"fi       let i++ 
done
echo "超过三次" 

例5:

把0~255的十进制整数转换成8位二进制数

#!/bin/bash
#把0~255的十进制整数转换成8位二进制数
read -p "请输入一个0~255的整数:" num
for i in 128 64 32 16 8 4 2 1
doNUM=$[num - i]if [ $NUM -lt 0 ];thenecho -n 0elseecho -n 1num=$[num - i]fi
done
echo ""

例6:

用while循环将一个200行的文件分割成多个50行的文件

#!/bin/bash
#用while循环将一个200行的文件分割成多个50行的文件filepath=/root/day10/test.txt
#定义行数计数器变量
a=0
#定义文件序号变量
i=1cat $filepath | while read line
dolet a++#判断是否已经读入50行,满50行则文件序号+1c=$[a % 50]if [ $c -eq 0 ];thenecho $line >> /root/day10/test${i}.txtlet i++elseecho $line >> /root/day10/test${i}.txtfi
done

三、until循环

注:条件不符合就会一直循环,直到条件符合后才会退出循环

until 条件测试操作  

do    

命令序列  

done 

例题:

打印数字1-10  

[root@localhost xunhuan]#until [ $i -gt 10   ]
> do
> echo $i
> let i++
> done

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

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

相关文章

KMP算法【C++】

KMP算法测试 KMP 算法详解 根据解释写出对应的C代码进行测试&#xff0c;也可以再整理成一个函数 #include <iostream> #include <vector>class KMP { private:std::string m_pat;//被匹配的字符串std::vector<std::vector<int>> m_dp;//状态二维数组…

哪些类型的产品适合用3D形式展示?

随着3D技术的蓬勃发展&#xff0c;众多品牌和企业纷纷投身3D数字化浪潮&#xff0c;将产品打造成逼真的3D模型进行展示&#xff0c;消费者可以更加直观地了解产品的特点和优势&#xff0c;从而做出更明智的购买决策。 哪些产品适合3D交互展示&#xff1f; 产品3D交互展示具有直…

自己手写一个字符串【C风格】

//字符串的常见操作 #include <iostream>#define MAX_SIZE 15 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int Status;//状态类型 typedef char ElemType;//元素类型typedef ElemType String[MAX_SIZE 1];//第一个字节记录长度//***tring是数…

c#自动生成缺陷图像-添加新功能(可从xml直接提取目标数据,然后进行数据离线增强)--20240524

在进行深度学习时,数据集十分重要,尤其是负样本数据。 故设计该软件进行深度学习数据预处理,最大可能性获取较多的模拟工业现场负样本数据集。 该软件基于VS2015、.NETFrameWork4.7.2、OpenCvSharp1.0.0.0、netstandard2.0.0.0、SunnyUI3.2.9.0、SunnyUI.Common3.2.9.0及Ope…

C盘磁盘空间不够用,怎样将d盘的空间划分给c盘?

C盘磁盘空间不够用&#xff0c;怎样将d盘的空间划分给c盘&#xff1f; 背景&#xff1a;win10系统下。C盘原有50G&#xff0c;如今只剩下8G&#xff0c;已经捉襟见肘了&#xff0c;想从D盘&#xff0c;割100G给C盘&#xff0c;以后软件能直接装C盘了。操作步骤如下&#xff1a…

2024年人文艺术与创新教育国际学术会议(ICHAIE 2024)

2024年人文艺术与创新教育国际学术会议&#xff08;ICHAIE 2024) 2024 International Conference on Humanities, Arts and Innovation Education 一、【会议简介】 随着全球化的推进和科技的迅猛发展&#xff0c;人文艺术与创新教育在培养未来人才方面扮演着越来越重要的角色…

springboot事务结合分布式锁超卖问题

背景 商品销售扣减库存是常见的场景&#xff0c;考虑性能的可以使用redis存储库存进行扣减&#xff0c;并发小的也可以采用数据量库存占用记录实时计算方式&#xff0c;最近开发的功能由于并发量不大&#xff0c;考虑到实现简洁的因素&#xff0c;决定采用库存占用记录实时计算…

后端之路第二站(正片)——SprintBoot之:设置请求接口

这一篇讲怎么简单结合模拟云接口&#xff0c;尝试简单的后端接接口、接受并传数据 一、下载Apifox接口文档软件 目前的企业都是采用前后端分离开发的&#xff0c;在开发阶段前后端需要统一发送请求的接口&#xff0c;前端也需要在等待后端把数据存到数据库之前&#xff0c;自己…

初始MyBatis ,详细步骤运行第一个MyBatis程序,同时对应步骤MyBatis底层剖析

1. 初始MyBatis &#xff0c;详细步骤运行第一个MyBatis程序&#xff0c;同时对应步骤MyBatis底层剖析 文章目录 1. 初始MyBatis &#xff0c;详细步骤运行第一个MyBatis程序&#xff0c;同时对应步骤MyBatis底层剖析每博一文案2. 前沿知识2.1 框架&#xff08;framework&#…

剪画小程序:3个方法:告诉你如何将普通的照片转换成动漫二次元风格!

Hello&#xff01;亲爱的小伙伴们&#xff01; 你是否还在纠结于自己的自拍太普通&#xff0c;每次分享到社交账号上都觉得平平无奇&#xff0c;引不起波澜&#xff1f; 假如&#xff0c;你和朋友们一起出去玩&#xff0c;大家都开心地拍着自拍。你看着自己的照片&#xff0c…

蓝桥杯-数三角(ac代码时间复杂度分析)

问题描述 小明在二维坐标系中放置了 ( n ) 个点&#xff0c;他想在其中选出一个包含三个点的子集&#xff0c;这三个点能组成三角形。然而这样的方案太多了&#xff0c;他决定只选择那些可以组成等腰三角形的方案。请帮他计算出一共有多少种选法可以组成等腰三角形&#xff1f…

WXML模板语法-事件绑定

一、 1.事件 事件是渲染层到逻辑层的通讯方式&#xff0c;通过事件可以将用户在渲染层产生的行为&#xff0c;反馈到逻辑层进行业务的处理 2.小程序中常用的事件 3.事件对象的属性列表 当事件回调触发的时候&#xff0c;会收到一个事件对象event&#xff0c;其属性为&#x…

在uni-app 插件市场下载 SKU 插件之后,引入项目报错问题

引入&#xff1a; git 提交报错&#xff1a; 原因&#xff1a;项目使用了 eslint 语法检查 解决&#xff1a;禁用 eslint 语法规则 在<script> 标签下面添加 /* eslint-disable */ 重新提交即可

【网络技术】【Kali Linux】Wireshark嗅探(十四)QUIC(快速UDP互联网连接)协议报文捕获及分析

往期 Kali Linux 上的 Wireshark 嗅探实验见博客&#xff1a; 【网络技术】【Kali Linux】Wireshark嗅探&#xff08;一&#xff09;ping 和 ICMP 【网络技术】【Kali Linux】Wireshark嗅探&#xff08;二&#xff09;TCP 协议 【网络技术】【Kali Linux】Wireshark嗅探&…

移动硬盘容量消失无法读取的解决方案

在数字化时代&#xff0c;数据的存储和备份变得尤为重要。移动硬盘作为一种便捷、大容量的存储设备&#xff0c;受到许多人的青睐。然而&#xff0c;有时我们可能会遭遇这样的问题&#xff1a;移动硬盘不显示容量且无法访问。这种情况无疑给我们的数据存储和管理带来了巨大的困…

uniapp移动端骨架屏流程

1.使用微信开发者工具来生成骨架屏&#xff1b;在分窗模式下选择页面信息&#xff0c;下拉选择生成骨架屏&#xff1b;他会基于当前页面生成骨架屏的样式 点击确定&#xff1b; 会自动生成这两个文件&#xff1b;一个是html结构文件&#xff0c;一个是css样式文件。 然后把这两…

黄石首家Pearson VUE国际认证考试中心落户湖北理工学院

Pearson VUE 作为 Pearson 集团的专门从事计算机化考试服务的公司&#xff0c;到目前为止&#xff0c;已在全世界165 个国家授权了 4400 多个考试中心以及超过 230 家 PVUE 自有考试中心&#xff0c;其中在中国的有三百多个授权考点和 4 个自有考试中心。Pearson VUE 以其技术和…

LLaMa系列模型详解(原理介绍、代码解读):LLaMA 3

LLaMA 3 2024年4月18日&#xff0c;Meta 重磅推出了Meta Llama 3&#xff0c;Llama 3是Meta最先进开源大型语言模型的下一代&#xff0c;包括具有80亿和700亿参数的预训练和指令微调的语言模型&#xff0c;能够支持广泛的应用场景。这一代Llama在一系列行业标准基准测试中展示…

java学习四

Random 随机数 数组 静态初始化数组 数组在计算机中的基本原理 数组的访问 什么是遍历 数组的动态初始化 动态初始化数组元素默认值规则 Java内存分配介绍 数组在计算机中的执行原理 使用数组时常见的一个问题 案例求数组元素最大值 public class Test1 {public static void ma…

<工控><PLC>汇川Easy521系列PLC与汇川SV630N伺服进行EtherCat通讯的相关配置及指令编写

前言 本系列是关于PLC相关的博文&#xff0c;包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。 PLC品牌包括但不限于西门子、三菱等国外品牌&#xff0c;汇川、信捷等国内品牌。 除了PLC为主要内容外&#xff0c;PLC相关元器件如触摸屏…