循环结构化命令小结

news/2024/10/18 7:48:34/

shell脚本编程系列


循环是编程不可或缺的一部分。bash shell提供了三种循环命令。

for命令允许遍历一系列的值,无论是在命令行中提供的,还是包含在变量中的,或是通过文件名通配符匹配获得的文件名和目录名。

for var in list
docommands
done

for (( variable assignment ; condition ; iteration processs  ))
docommands
done

while命令提供了基于命令(使用普通命令或test命令)的循环方式。只有在命令(或条件)产生退出状态码0时,while循环才会继续迭代指定的一组命令。

while test command
do other commands
done

until命令提供了迭代命令的另一种方式,但它的迭代建立在命令(或条件)产生非0退出状态码的基础上。这个特性允许你设置一个迭代结束前都必须满足的条件。

until test commands
doother commands
done

可以在shell脚本中组合多种循环方式,生成多层循环。bash shell提供了continue命令和break命令,允许根据虚幻内的不同值改变循环的正常流程。


#!/bin/bash
# using until and while loopsvar1=3until [ $var1 -eq 0 ]
doecho "Outer loop: $var1"var2=1while [ $var2 -lt 5 ]dovar3=$(echo "scale=4; $var1 / $var2" | bc)echo "   Inner loop: $var1 / $var2 = $var3"var2=$[ $var2 + 1 ]donevar1=$[ $var1 - 1 ]
done

bash shell还允许使用标准的命令重定向和管道来改变循环的输出,你可以将循环的输出重定向至文件或是通过管道将循环的输出传给另一个命令。也可以通过输入重定向读取文件的内容。

当在命令行执行程序的时候,Linux系统会搜索一系列目录来查找对应的文件。这些目录都是在环境变量PATH当中定义的,如果想找出哪些可执行文件可以使用,只需扫描PATH环境变量中的所有目录。
首先通过IFS修改环境分隔符,然后对环境变量PATH参数进行迭代,参数值会根据分隔符拆分,将值作为列表传给for命令进行循环。
在遍历每一个PATH路径时,在后面添加通配符用于迭代该目录中的所有文件。并判断该文件是否可执行而且是文件(非目录)。最后的脚本内容如下所示

#!/bin/bash
# finding files in the PATHIFS=:
for folder in $PATH
doecho "$folder:"for file in $folder/*doif [ -x $file ] && [ -f $file ]thenecho "   $file"fidone
done

shell脚本的目标是减轻系统管理员的工作负担,如果要创建一堆的用户账号,通过while循环可以降低工作的难度。可以考虑将用户账号放到一个文本当中,根据指定的格式输入要创建的账户。比如格式为loginname,name。那么此时读取文件中的数据,使用while循环如下所示

while IFS=',' read -r userid name

这里while使用了多个命令,第一个用于修改分隔符,第二个用于根据指定的格式读取文件。最后是否退出只会看最后一个命令的退出状态码,也就是read命令,而这个read命令在读取完整个文件后返回非0退出状态码(代表错误)。
另外要想把数据从文件中传入while命令,只需要在while命令尾部使用一个重定向符即可。

#!/bin/bash
# process new user accountsinput="users.csv"
while IFS=',' read -r userid name
doecho "adding $userid"useradd -c "$name" -m $userid
done < "$input"

http://www.ppmy.cn/news/47211.html

相关文章

MySQL索引数据结构入门

之前松哥写过一个 MySQL 系列&#xff0c;但是当时是基于 MySQL5.7 的&#xff0c;最近有空在看 MySQL8 的文档&#xff0c;发现和 MySQL5.7 相比还是有不少变化&#xff0c;同时 MySQL 又是小伙伴们在面试时一个非常重要的知识点&#xff0c;因此松哥打算最近再抽空和小伙伴们…

在React中使用setState修改数组的值时,为什么不能使用数组的可变方法(push、unshift等)? 但在vue中可以

一、为什么React中修改数组时不能使用数组的可变方法 在React中使用setState修改数组的值时&#xff0c;不推荐使用数组的可变方法&#xff08;如push、unshift等&#xff09;。这是因为React会对比新旧状态&#xff0c;在发现状态变化后&#xff0c;更新组件的渲染。但当你调…

TiDB实战篇-TiDB Cluster部署

简介 部署TiDB Cluster部署&#xff0c;熟系集群的基础操作。 集群规划 机器拓扑 3pd,3tikv,1tidb_server.1tiflash,监控。 192.168.66.10192.168.66.20192.168.66.21 pd_servers tikv_servers tidb_servers tiflash_servers pd_servers tikv_servers monitoring_servers…

SSH升级

升级openssh版本 一、安装telnet远程管理主机1、检查是否安装telnet2、安装telnet服务 二、下载所需的安装包1、下载openssl、openssh、zlib安装包2、安装所需的相关软件3、备份原来的数据4、复制文件到/usr/local/bin/下增加执行权限 一、安装telnet远程管理主机 1、检查是否…

用SQL语句操作Oracle数据库--数据查询详解(下篇)

数据查询是数据库的核心操作。上一篇文章我们介绍了单表查询操作&#xff0c;本文将继续介绍另一种重要的查询类型—[ 多表查询 ]&#xff08;涉及多个表的数据查询&#xff09;。 本文我们将使用以下三个表来进行查询操作&#xff1a; TABLE1: S(学生基本信息表) TABLE2: C(…

设置Pycharm的背景颜色(样式)、图片

目录 一、效果 二、背景图片 三、背景颜色 一、效果 二、背景图片 1.打开Pycharm中的File-Settings 2.点击Appearance & Behavior中的Appearance&#xff0c;然后点击Bcakground Image &#xff08;图中已标明顺序&#xff09; 3.找到图片并选中。 &#xff08;图中已…

需要买apple pencil吗?ipad第三方电容笔了解下

第一款ipad早在诞生于十年前&#xff0c;并被作为一款平板电脑使用&#xff0c;其性能十分出色。随着IPAD的不断更新换代&#xff0c;IPAD已经被越来越多的人接受了。其中&#xff0c;iPad的附属配件起到了很大的作用&#xff0c;就像今天要介绍的电容笔&#xff0c;它是我们进…

ARM rootfs、linuxrc 的简单制作

一、nfs 方式启动自制简易文件夹形式的rootfs 1、什么是nfs (1) nfs 是一种网络通讯协议&#xff0c;由服务器和客户端构成。 (2) nfs 的作用。利用 nfs 协议&#xff0c;可以做出很多直接性的应用&#xff0c;我们这里使用 nfs 主要是做 rootfs 挂载。 开发板中运行 kerne…