点击返回 自学Linux命令行与Shell脚本之路

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命令的更多相关文章

  1. 自学Linux Shell12.1-结构化命令if-then

    点击返回 自学Linux命令行与Shell脚本之路 12.1-结构化命令if-then 许多程序要求对shell脚本中的命令施加一些逻辑流程控制.有一类命令会根据条件使脚本跳过某些命令.这样的命令通常 ...

  2. 自学Linux Shell12.2-test命令

    点击返回 自学Linux命令行与Shell脚本之路 12.2-test命令 if-then语句不能测试命令退出状态码之外的条件,test命令提供了在if-then语句中测试不同条件的途径. 如果tes ...

  3. 自学Linux Shell12.3-case命令

    点击返回 自学Linux命令行与Shell脚本之路 12.3-case命令 有了case命令,就不需要写出所有elif语句来不停的检查同一个变量的值了.case命令会采用列表格式来检查单个变量的多个值 ...

  4. 自学Linux Shell12.5-while、until命令

    点击返回 自学Linux命令行与Shell脚本之路 12.5-while.until命令 until 循环与 while 循环在处理方式上刚好相反. while循环用于不断执行一系列命令,也用于从输入 ...

  5. 自学Linux Shell12.6-嵌套循环for命令

    点击返回 自学Linux命令行与Shell脚本之路 12.6-嵌套循环for命令 嵌套循环就是在一个循环中还有一个循环. 内部循环在外部循环体中,在外部循环的每次执行过程中都会触发内部循环,直到内部循 ...

  6. 自学Linux Shell12.7-控制循环break、continue命令

    点击返回 自学Linux命令行与Shell脚本之路 12.7-控制循环break.continue命令 break命令.break命令用于跳出循环,使用break可以跳出任何类型的循环:for.whi ...

  7. 自学Linux Shell3.1-帮助命令man

    点击返回 自学Linux命令行与Shell脚本之路 3.1-帮助命令man 1.man命令概述 默认bash shell提示符是美元符号($),这个符号表明shell在等待用户输入. Linux ma ...

  8. 自学Linux Shell3.3-列表命令ls

    点击返回 自学Linux命令行与Shell脚本之路 3.3-列表命令ls ls命令用于显示文件目录列表,和Windows系统下DOS命令dir类似.当执行ls命令时,默认显示的只有非隐藏文件的文件名. ...

  9. 自学Linux Shell12.8-循环实例

    点击返回 自学Linux命令行与Shell脚本之路 12.8-循环实例 待定. 3 fi bash shell的if语句会运行if后面的那个命令. 如果该命令的退出状态码是0 (该命令成功运行),位于 ...

随机推荐

  1. Luogu P1966 火柴排队

    这还是一道比较简单的题目,稍微想一下就可以解决.终于有NOIP难度的题目了 首先我们看那个∑(ai-bi)^2的式子,发现这个的最小值就是排序不等式 所以我们只需要改变第一组火柴的顺序,使它和第二组火 ...

  2. .NET持续集成与自动化部署之路第一篇——半天搭建你的Jenkins持续集成与自动化部署系统

    .NET持续集成与自动化部署之路第一篇(半天搭建你的Jenkins持续集成与自动化部署系统) 前言     相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛 ...

  3. 认识Python&基础环境搭建

    前言 作为.NET Coder可能.NET Core是现阶段首要学习方向,但是说实在的对Core真的不感冒. 原因有几点: 1.公司项目底层需要的一部分库,Core还不支持. 2.同样的需求,.NET ...

  4. Spring+SpringMVC+MyBatis整合(easyUI、AdminLte3)

    实战篇(付费教程) 花了几天的时间,做了一个网站小 Demo,最终效果也与此网站类似.以下是这次实战项目的 Demo 演示. 登录页: 富文本编辑页: 图片上传: 退出登录: SSM 搭建精美实用的管 ...

  5. Nginx挂载维护页或返回自定义响应信息

    在服务停机升级或者服务暂不可用时,往往希望能够返回给用户更为明确和友好的响应信息.可以通过修改nginx配置文件,达到返回自定义信息的效果.有如下几种配置方式: (1)Nginx接收到的所有请求,都返 ...

  6. RocketMQ 简单梳理 及 集群部署笔记

    一.RocketMQ 基础知识介绍Apache RocketMQ是阿里开源的一款高性能.高吞吐量.队列模型的消息中间件的分布式消息中间件. 上图是一个典型的消息中间件收发消息的模型,RocketMQ也 ...

  7. Oracle数据库设置为归档模式的操作方法

    Oracle归档模式非常非常重要!对于有些数据库刚装好后可能是非归档模式,这是很危险的!为了安全起见,一定要谨记:对于Oracle数据库,一定要设置为归档模式,尤其是生产库,只有这样才能实现数据库的有 ...

  8. 补充照片:某基同学使用Bing词典

    某基同学使用Bing词典的照片

  9. linux及安全第三周总结——跟踪分析LINUX内核的启动过程

    linux内核目录结构 arch目录包括了所有和体系结构相关的核心代码.它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CPU及与之相兼容体系结构的子目录.PC机一 ...

  10. JQuery 操作 radio 被坑一例

    .removeAttr('checked'); .prop('checked',false); .prop('checked',true); 与 .attr("checked",t ...