运维入门之bash shell脚本四,
运维入门之bash shell脚本四,
for命令:
for var in list
do
commands
done
$user 变量保持了其值,也允许我们修改它的值,并在for命令循环之外跟其他变量一样使用
从命令读取值:
一个特殊的环境变量IFS,叫做内部字段分隔符( internal field separator ),IFS环境变量定义了bash shell 用作字段分隔符的一系列字符,默认情况下,bash shell 会将 空格 、 制表符、 换行符 当做字段分隔符。当然,可以通过在shell脚本中临时修改IFS环境变量的值来限制被bash shell 当做字段分隔符的字符。
例如:如果你想修改IFS的值,使其只能识别换行符,则 IFS = $ '\n'
在处理代码量较大的脚本时。可能在一个地方需要修改IFS的值,然后忽略这次修改,在脚本其他地方继续沿用IFS默认值,一个可参考的安全实践是在改变IFS之前保存原来的IFS值,之后在恢复它,可以通过
IFS.OLD=$ IFS
IFS=$'\n'
<在代码中使用新的IFS值>
IFS=$IFS.OLD
这就保证了在脚本的后续操作中使用的是默认的IFS值
如果要指定多个IFS字符,只要将它们在赋值行串起来就行了
IFS=$'\n':;"
while命令:
格式为 while test command
do
other cammands
done
while命令允许你在while语句行定义多个测试命令,只有最后一个测试命令的退出状态码会被用来决定什么时候结束循环。
util命令和while命令刚好相反,只有测试命令的退出状态码不为0,bash shell才会执行循环中列出的命令,一点测试命令返回了退出状态码0,循环就结束了(和while一样,同样可以有多个测试命令)
until test commands
other commands
done
循环处理文件:
通常需要遍历文件中的数据,这要求结合已经讲过的两种技术:
1、使用嵌套循环
2、修改IFS环境变量
下面的例子是从/etc/passwd中获取数据,先逐行遍历/etc/passwd文件,并将IFS变量的值改成冒号,从而分割每行数据中的字段
上述脚本使用两个不同的IFS值来解析数据,第一个IFS值解析出/etc/passwd文件中的单独行,内部for循环接着将IFS修改为冒号,允许你从/etc/passwd的行中解析出单独的值。
控制循环:
break、continue
1、跳出单个循环
2、跳出内部循环
当使用了多重循环时,break只会退出你所在的最内层循环。
3、跳出外部循环;
break 命令接受单个命令行参数: break n
continue与break用法一样
如果continue跳过的循环中包含变量的自增问题就会出现
处理循环的输出:
在shell脚本中,你可以对循环的输出使用管道或进行重定向,这可以在done命令之后添加一个处理命令来实现
实例:搜索某个文件夹下的可执行文件
评论暂时关闭