shell的for循环

news2024/11/23 9:34:41

列表for循环

  1. 列表for循环的语法结构如下:
for variablein list	#每一次循环,依次把列表list 中的一个值赋给循环变量
do					#循环体开始的标志
	commands		#循环变量每取一次值,循环体就执行一遍commands
done				#循环结束的标志,返回循环顶部

列表 list 可以是命令替换、变量名替换、字符串和文件名列表(可包含通配符),每列表项以空格间隔。
for 循环执行的次数取决于列表 list 中单词的个数,可以省略in list,省略时相当于in"$@"。

  1. 例1:
#!/bin/bash
##filename:for1.sh
for x in centos ubuntu windows max
do
	echo "$x"
done

将字符串列表作为list,list包含centos ubuntu windows max,字符串以空格分割,for循环会把list列表依次输出
在这里插入图片描述

  1. 例子2,列表中包含"centos ubuntu" "windows 7 10"带空格的列表项,必须要用双引号括起来作为一个整体。
#!/bin/bash
##filename:for2.sh
for x in linux "centos ubuntu" windows "windows 7 10"
do
	echo "$x" ;
done

在这里插入图片描述
4. 例3,”== ls ==“是echo "$x"的输出结果,而40k这种信息是eval $x的输出结果(eval会将 $x 替换为没命令),然后执行命令,输出结果

#!/bin/bash
#filename:for3.sh
for x in ls "df -h" "du -sh"
do
	echo "==$x==" ; eval $x
done

在这里插入图片描述
5. 列表for循环执行流程:
首先将list的item1 赋给 variable,然后执行 do和done 之间的命令接着再将 list的item2赋给 variable,继续执行 do和done 之间的命令,如此循环,直到 list中的所有item值都已经用完才退出循环
在这里插入图片描述

不带列表for循环

  1. 不带列表的for循环执行是由用户指定参数和参数的个数,不带列表的for循环的基本格式:
不带列表的for循环的基本格式:
for	variable
	do
		command
		command
		..
	done

其中 do和done之间的命令称为循环体,shell 会自动地将命令行输入的所有参数依次组织成列表,每次将一个命令行输入的参数显示给用户,直至所有的命令行中的参数都显示给用户。

  1. 例子1,所有输入的内容,都是通过脚本参数传递进去的,所以说,不带列表的 for循环其实是使用位置参数变量 "$ @"来传递 for 中的 list列表,其实相当于for 循环省略了in$@关键字。
#!/bin/bash
#filename:for4.sh
i=1
for day ; do
	echo -n "positional parameter $((i++)): $day "
	case $day in
		[Mm]on|[Tt]ue|[Ww]ed|[Tt]hu|[Ff]ri)
			echo " (weekday)"
			;;
		[Ss]at[Ss]un)
			echo " (WEEKEND)"
			;;
		*) echo "(Invalid weekday)"
			;;
	esac
done


[root@localhost tmp]# sh for4.sh Mon Tue wed Thu Fri sat Sun ok
positional parameter 1: Mon  (weekday)
positional parameter 2: Tue  (weekday)
positional parameter 3: wed  (weekday)
positional parameter 4: Thu  (weekday)
positional parameter 5: Fri  (weekday)
positional parameter 6: sat (Invalid weekday)
positional parameter 7: Sun (Invalid weekday)
positional parameter 8: ok (Invalid weekday)

for循环举例

1.例1 所有文件名大写替换为小写
#!/bin/bash
##filename:for5.sh
for fname in * ;do
fn=$(echo $fname | tr A-Z a-z)
if [[ $fname != $fn ]] ; then mv $fname $fn ; fi
done

这个脚本的功能是将当前目录下的所有的大写文件名改为小写文件名。注意,脚本中的*表示当前目录下的文件和目录。首先使用命令替换生成小写的文件名,赋予新的变量f,如果新生成的小写文件名与原文件名不同,则改为小写的文件名。
在这里插入图片描述

2. 例2 读取/etc/passwd文件,依次输出ip段
#!/bin/bash
##filename:for6.sh
i=1
for username in `awk -F: '{print $1}' /etc/passwd`
do
	echo "Username $((i++)) : $username"
done

for suffix in $(seq 10)
do
	echo "192.168.0.${suffix}"
done

脚本实现两个功能:
第1个功能是读取/etc/passwd 文件,通过awk 获取第1列的内容作为 list,注意in 后面命令的写法,是个反引号,也就是键盘(Esc)下面的那个键,
第2个功能是通过seq 指定数字list,从1~10,然后依次输出一个IP 范围段
在这里插入图片描述

3. 例3 读取/etc/hosts内容for循环,执行ping
#!/bin/bash
#filename:for7_host.sh

for host in $(cat /etc/hosts)
do
	if ping -c1 -w2 $host &>/dev/null
	then
		echo "host ($host) is active."
	else
		echo "host ($host) is down."
	fi
done

这个脚本的功能是通过读取/etc/hosts 的内容作为 for循环的list,然后对读取到的内容进行ping 操作,如果能够ping通,显示active,否则显示DOWN。
在这里插入图片描述

4. 例4 循环ip列表,输出对应编号
#!/bin/bash
#filename:for8.sh
mynet="192.168.0"
for num in {1..6}
do
echo "IP Address $num: $mynet.$num"
done

for num in {1..10..2}
do
echo "Number: $num"
done

这个脚本是通过数值范围作为 for 循环的 lit 列表,1.6表示从1~6,而110…2是使用包含步长(increment)的数值范围作为for 循环的list,表示从1~10,每隔2个步长,执行脚本,输出如下:
在这里插入图片描述

5. 例5 批量添加用户
#!/bin/bash
#filename:for9.sh
for x in {1..10}
do
useradd user${x}
echo "centos"|passwd --stdin user${x}
chage -d 0 user${x}
done

这个脚本功能是批量添加10个Linux系统用户。需要注意的是,stdin 是接受echo后面的字符串作为密码,stdin 表示非交互,直接传入密码,passwd 默认是要用终端作为标准输入,加上–stdin 表示可以用任意文件做标准输入,于是这里用管道作为标准输入。最后的chage命令是强制新建用户第1次登录时修改密码。
在这里插入图片描述

break

break用于强行退出当前循环,格式如下:

break [n]

如果是嵌套循环,则 break 命令后面可以跟一数字 n,表示退出第n重循环(最里面的为第1重循环)。

1. 例1 break
#!/bin/bash
#filename:for10.sh
i=1
for day in Mon Tue Wed Thu Fri
do
	echo "Weekday $((i++)) : $day"
	if [ $i -eq 3 ]; then	#脚本是当变量i等于3的时候退出循环,初始值为1。
		break
	fi
done

在这里插入图片描述

continue

continue 用于忽略本次循环的剩余部分,回到循环的顶部,继续下一次循环,使用方法如下:

continue [n]

如果是嵌套循环,continue命令后面也可跟一数n,表示回到第n重循环的顶部。

1. 例1 continue
#!/bin/bash
##filename:for11.sh
i=1
for day in Mon Tue Wed Thu Fri Sat Sun
do
	echo -n "Day $((i++)) : $day"
	if [ $i -eq 7 -o $i -eq 8 ]; then
		echo "(WEEKEND)"
		continue
	fi
	echo "(weekday)"
done

这个脚本的含义是变量i等于1~6时,输出对应的day变量的值,并显示(weekday),当变量i等于7或者8时,输出(WEEKEND)。注意这里的S((i++)),默认i等于1,当第1个i变量传递到f语句中时,i已经是2了。执行上面脚本,输出如下:
在这里插入图片描述

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

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

相关文章

腾讯待办关停,导出的数据怎么恢复到手机上面?

相信有不少腾讯待办的用户都发现了其“业务关停通知”,确实如此,由于业务调整,腾讯待办将于2023年的12月20日全面停止运营并下架,这就表示以后我们无法继续使用它了。在腾讯待办关停之前,绝大多数用户需要做的就是及时…

推荐一款功能强大的在线文件预览工具-kkFileView

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

【论文笔记】UniPAD: A Universal Pre-training Paradigm for Autonomous Driving

原文链接:https://arxiv.org/pdf/2310.08370.pdf 1. 引言 过去的3D场景理解预训练方法多采用2D图像领域中的想法,可大致分为基于对比的方法和基于MAE的方法。 基于对比的方法通过对比损失,在特征空间中将相似的3D点拉进而将不相似的点分开…

Oracle获取执行计划的6种方法

一、什么是执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述。 执行计划描述了SQL引擎为执行SQL语句进行的操作,分析SQL语句相关的性能问题或仅仅质疑查询优化器的决定时,必须知道执行计划;所以执行计划常用…

Django框架的推导

文章目录 Web应用简介什么是Web框架?什么是Web?应用程序的两种模式Web应用程序的优缺点 手写Web框架HTTP协议的相关知识1.四大特性2.请求数据格式3.响应数据格式 手写框架 使用wsgiref模块基于wsgiref模块搭建Web框架(最初版)基于wsgiref模块搭建Web框架…

口袋参谋:像我这样做买家秀,日销翻一番!

​为什么别人的买家秀那么好看?而你家的买家秀却平平无奇!想知道原因的,请往下看。 01 买家秀的作用 我们先简单说说买家秀的作用 首先就是可以表明产品和实物的真实性,与打开的详情页相符,加强详情页描述的信任度。…

Android transform旋转rotate圆角矩形图roundedCorners,Kotlin

Android transform旋转rotate圆角矩形图roundedCorners,Kotlin import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import com.bumptech.glide.…

YOLOv4: Optimal Speed and Accuracy of Object Detection(2020.4)

文章目录 AbstractIntroductionRelated workObject detection modelsBag of freebiesBag of specials MethodologySelection of architectureSelection of BoF and BoSAdditional improvementsYOLOv4 ExperimentsResults表8列出了使用Maxwell GPU的帧率对比结果表9列出了使用Pa…

一图掌握PMP49个过程组

一图掌握PMP 49个过程组

nigix安装以及遇到的问题

Nginx配置 nginx双击闪退如何解决 修改配置文件 端口冲突,将端口改为90 Nginx 动静分离(前端的代码单独运行) 将html文件夹里面的东西放到nginx里面的HTMl文件夹里面 负载均衡(轮询,权重,哈希&#xff…

Android 13.0 Settings主页面去掉FocusRecyclerView相关功能

1.前言 在13.0的系统rom产品定制化开发中,在系统Settings主页面的主菜单中,在测试某些功能的时候,比如开启护眼模式和改变系统密度会在主菜单第一项的网络菜单头部增加 自定义您的设备和设置护眼模式时间安排 等等相关的设置模块 这对于菜单布局显示相当不美观,所以根据系…

nginx反向代理报错合集

本文汇集了最近在使用nginx反向代理过程中遇到的一系列错误及其解决办法。 1缺乏支持项导致nginx配置错误 在利用sudo ./configure --with-http_ssl_module --with-http_stub_status_module进行配置时,往往会遇到以下类型的错误 error: the HTTP rewrite module …

字符加密A--E,B-F,W--A

文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码 前言 本系列为选择结构编程题&#xff0c;点滴成长&#xff0c;一起逆袭。 一、题目描述 二、题目分析 三、解题 程序运行代码 #include<stdio.h> int main(){char c;cgetchar();if(c>a&&…

【C/PTA——7.数组1】

C/PTA——7.数组1 7-1 计算最大值出现的次数1.题目要求2.代码实现 7-2 求一批整数中出现最多的个位数字1.题目要求2.代码实现 7-3 装箱问题1.题目要求2.代码实现 7-4 数组-值钱的微信号1.题目要求2.代码实现 7-5 数组-吹泡泡1.题目要求2.代码实现 7-6 数组-数学鬼才1.题目要求2…

基于工业无线DTU的空气污染监测防治方案

​秋冬季是我国大气污染天气的高发、频发期&#xff0c;也是大气污染防治的关键期、敏感期。针对空气质量的监测和防治&#xff0c;可以利用佰马工业无线DTU&#xff0c;搭建分布式大气传感器监测网络&#xff0c;实现对广域空气质量、成分、变化的实时监测&#xff0c;从而实现…

汽车工业生产线数字孪生可视化管理平台,赋予工厂车间数字化智慧化管理

在工业4.0 的时代背景下&#xff0c;随着企业数字化进程的推进&#xff0c;数字孪生可视化技术逐渐在汽车行业得到广泛应用&#xff0c;数字孪生智慧工厂的建设也成为了汽车行业数字化转型的趋势之一。汽车制造业属于典型的离散制造行业&#xff0c;汽车生产包含冲压、焊接、涂…

flutter显示出底部控件的引导页

需求&#xff1a;同一个页面的两个不同的入口&#xff0c;同一个控件的位置有变化&#xff0c;显示引导页时对应这个控件的引导内容的位置也需要改变&#xff1b;同时半透明底部显示出真实的页面内容。 这样的需要如果切图然后再往页面上贴位置无法精确的对准。 思路&#xff1…

xcode SDK does not contain ‘libarclite‘

SDK does not contain libarclite at the path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a; try increasing the minimum deployment target解决方法 iOS13以上

线性系统的激励和响应以及与系统特性的联系

线性系统的激励和响应以及与系统特性的联系 一、系统激励和响应的定义 一个线性系统可以用一个常系数线性微分方程来表示。比如&#xff0c;RC串联电路&#xff0c;电容器两端的电压 u c ( t ) u_c(t) uc​(t)所满足的关系式为&#xff1a; R C d u c d t u c e ( t ) RC\…