自学Linux Shell12.4-for命令
12.4-for命令
1. for命令
格式一
for var in list
do
commands
done
格式二
for var in list;do
- 在list参数中,需提供迭代中使用的一系列值
- 在每次迭代中,变量var会包含列表中的当前值,第一次迭代使用列表中第一个值,第二次迭代使用列表中第二个值,以此类推
- 在do和done语句之间输入的命令可以使一条或者几条命令,在这些命令中$var变量包含着这次迭代对应的当前列表的值
list参数中,需提供迭代中使用的一系列值,可以通过多种方式制定List列表中的值。
1.1 读取列表中的值
for的基本用法就是遍历for名利自身所定义的一系列值。
在最后一次迭代后,$test变量的值会在shell脚本的剩余部分保持有效。它会一直保持最后一次迭代的值(除非你修改了它)
1.2 读取列表中复杂的值
for循环List每个值用空格分割,当列表中有单引号或者空格时,遍历时会出现错误,有两种解决办法:
- 使用转义字符(反斜线)来将单引号转移;
- 使用双引号来定义用到单引号的值。
1.3 从变量读取列表中的值
将一系列的值都集中存储在一个变量中,然后需要遍历变量中的整个列表。
1.4 从命令中读取值
有两种方式可以将命令输出赋值给变量:
- 反引号字符(`)
- $()格式
1.5 更改字段分隔符
上面的例子存在一个问题,就是如果命令中数值是有空格的话,for依然将它每个单词作为单独的值。造成这个问题的原因是特殊的环境变量IFS,叫作内部字段分隔符。
默认情况下,bash shell会将下列字符当作字段分隔符:
- *空格
- *制表符
- *换行符
如果bash shell在数据中看到这些字符中的任意一个,它就会假定这表明了列表中一个新数据字段的开始。
1.5.1 想修改IFS的值,使其只能识别换行符,那就必须:
IFS=$'\n'
将这个语句加入到脚本中,告诉bash shell在数据值中忽略空格和制表符。
1.5.2 一个可参考的安全实践是在改变IFS之前保存原来的IFS值,之后再恢复它。
IFS.OLD=$IFS
IFS=$'\n'
<在代码中使用新的IFS值>
IFS=$IFS.OLD
这就保证了在脚本的后续操作中使用的是IFS的默认值。
1.5.3 遍历一个文件中用冒号分隔的值:
IFS=:
1.5.4 如果要指定多个IFS字符,只要将它们在赋值行串起来就行。
IFS=$'\n':;"
这个赋值会将换行符、冒号、分号和双引号作为字段分隔符。如何使用IFS字符解析数据没有任何限制。
1.6 用通配符读取目录
for命令自动遍历目录中文件,进行此操作必须在文件名或路径名中使用通配符。
for file in /proc/*;
do
echo $file is file path \! ;
done
2. for命令(C语言风格)
for((expr1; expr2; expr3))
do
command
command
...
done
有些部分并没有遵循bash shell标准的for命令:
- 变量赋值可以有空格
- 条件中的变量不以美元符开头
- 迭代过程的算式为用expr命令格式
也可以使用多个变量,但却只能在for循环中定义一种条件。
使用类C风格for循环要注意以下事项:
- 如果循环条件最初的退出状态为非0,则不会执行循环体
- 当执行更新语句时,如果循环条件的退出状态永远为0,则for循环将永远执行下去,从而产生死循环
- Linux shell中不运行使用非整数类型的数作为循环变量
- 如果循环体中的循环条件被忽略,则默认的退出状态为0
- 在类C风格的for循环中,可以将三个语句全部忽略掉,for((; ; ))
3. 处理循环的输出
将结果重定向到output.txt文件,不输出到屏幕
done > output.txt
自学Linux Shell12.4-for命令的更多相关文章
- 自学Linux Shell12.1-结构化命令if-then
点击返回 自学Linux命令行与Shell脚本之路 12.1-结构化命令if-then 许多程序要求对shell脚本中的命令施加一些逻辑流程控制.有一类命令会根据条件使脚本跳过某些命令.这样的命令通常 ...
- 自学Linux Shell12.2-test命令
点击返回 自学Linux命令行与Shell脚本之路 12.2-test命令 if-then语句不能测试命令退出状态码之外的条件,test命令提供了在if-then语句中测试不同条件的途径. 如果tes ...
- 自学Linux Shell12.3-case命令
点击返回 自学Linux命令行与Shell脚本之路 12.3-case命令 有了case命令,就不需要写出所有elif语句来不停的检查同一个变量的值了.case命令会采用列表格式来检查单个变量的多个值 ...
- 自学Linux Shell12.5-while、until命令
点击返回 自学Linux命令行与Shell脚本之路 12.5-while.until命令 until 循环与 while 循环在处理方式上刚好相反. while循环用于不断执行一系列命令,也用于从输入 ...
- 自学Linux Shell12.6-嵌套循环for命令
点击返回 自学Linux命令行与Shell脚本之路 12.6-嵌套循环for命令 嵌套循环就是在一个循环中还有一个循环. 内部循环在外部循环体中,在外部循环的每次执行过程中都会触发内部循环,直到内部循 ...
- 自学Linux Shell12.7-控制循环break、continue命令
点击返回 自学Linux命令行与Shell脚本之路 12.7-控制循环break.continue命令 break命令.break命令用于跳出循环,使用break可以跳出任何类型的循环:for.whi ...
- 自学Linux Shell3.1-帮助命令man
点击返回 自学Linux命令行与Shell脚本之路 3.1-帮助命令man 1.man命令概述 默认bash shell提示符是美元符号($),这个符号表明shell在等待用户输入. Linux ma ...
- 自学Linux Shell3.3-列表命令ls
点击返回 自学Linux命令行与Shell脚本之路 3.3-列表命令ls ls命令用于显示文件目录列表,和Windows系统下DOS命令dir类似.当执行ls命令时,默认显示的只有非隐藏文件的文件名. ...
- 自学Linux Shell12.8-循环实例
点击返回 自学Linux命令行与Shell脚本之路 12.8-循环实例 待定. 3 fi bash shell的if语句会运行if后面的那个命令. 如果该命令的退出状态码是0 (该命令成功运行),位于 ...
随机推荐
- Luogu4774 NOI2018 屠龙勇士 ExCRT
传送门 原来NOI也会出裸题啊-- 用multiset求出对付每一个BOSS使用的武器威力\(ATK_i\),可以得到\(m\)个式子\(ATK_ix \equiv a_i \mod p_i\) 看起 ...
- LiveCharts文档-3开始-5序列Series
原文:LiveCharts文档-3开始-5序列Series LiveCharts文档-3开始-5序列Series Strokes和Fills 笔触和填充 所有的Series都有笔触和填充属来处理颜色, ...
- Ionic2 播放mp3功能实现
在开发app的过程中有需要播放mp3的功能,一直想实现,但苦于具体的困难一直未能实现,经过一段时间的资料查询和测试,最终摸索出来,现记录如下: 1.最重要的是安装第三方插件ionic-audio,开源 ...
- 算法相关——Java排序算法之快速排序(三)
0. 前言 本系列文章将介绍一些常用的排序算法.排序是一个非常常见的应用场景,也是开发岗位面试必问的一道面试题,有人说,如果一个企业招聘开发人员的题目中没有排序算法题,那说明这个企业不是一个" ...
- Java 基础之一对象导论
对象导论 1.1 抽象过程 所有编程语言都提供抽象机制.人们所能解决的问题的复杂性直接取决于抽象的类型和质量. 汇编语言是对底层机器的轻微抽象. 我们将问题空间中的元素及其再解空间中的表示称为对象.这 ...
- Linux ugo 权限
Linux 系统中文件的 ugo 权限是 Linux 进行权限管理的基本方式.本文将介绍 ugo 权限的基本概念.说明:本文的演示环境为 ubuntu 16.04. 文件的所有者和组 Linux 文件 ...
- restfull环境搭建-helloword(三)
原文地址:http://only81.iteye.com/blog/1689537 This section creates a CRUD (Create, Read, Update, Delete) ...
- BugPhobia进阶篇章:前端技术/设计文档
0x01 :前端概述 0x0100 :前端基本描述 前端基础框架 Semantic UI 根据http://semantic-ui.com/提供的样例和文档,依据Version 2.1.4版本的特性进 ...
- JWT验证
理解 JSON Web Token(JWT) 验证 JSON Web Token认证的操作指南 在本文中,我们将了解JSON Web Token的全部内容. 我们将从JWT的基本概念开始,然后查看其结 ...
- Apache+php安装和配置 windows
Apache+php安装和配置 windows Apache 安装 1.官网网址:http://httpd.apache.org/ 2.Download 3.点击链接Files for Microso ...