shell的for循环语句

for循环

如何工作?

for 循环是3个shell循环结构中的第一个。这个循环允许指定一个值的列表。列表中的命令为每个在列表中的值执行。

这个循环的语法结构是这样的:

for NAME [in LIST ]; do COMMANDS; done

如果 [in LIST] 不存在的话,就使用 in $@ 替换且 for 对每个位置参数执行一次 COMMANDS

返回值为最后执行命令的退出状态。如果由于没有 LIST 中没有任何项目就不执行命令,返回值是零。

NAME 可以使任何变量的名字,虽然 i 的使用非常普遍LIST 可以是任何字的列表,字符串和数字,命令生成。执行的 COMMANDS 也可以是任何操作系统命令,脚本,程序或者shell语句。第一次执行循环的时候,NAME 设置为LIST 中的第一个项目。第二次,它的值设置成列表中的第二个项目,以此类推。当 NAME 得到了在 LIST 中所有的值之后循环中止。

9.1.2. 例子

为指定的LIST项目使用命令替换

第一个是命令行例子,证明 for 循环的使用来为每个 .xml 文件做备份。执行了这个命令之后,在你的源代码上工作就变得很安全:

[carol@octarine ~/articles] ls *.xml
file1.xml  file2.xml  file3.xml

[carol@octarine ~/articles] ls *.xml > list

[carol@octarine ~/articles] for i in `cat list`; do cp "$i" "$i".bak ; done

[carol@octarine ~/articles] ls *.xml*
file1.xml  file1.xml.bak  file2.xml  file2.xml.bak  file3.xml  file3.xml.bak

这个列出了在 /sbin 中的正好是纯文本的文件,这是可能的脚本:

for i in `ls /sbin`; do file /sbin/$i | grep ASCII; done

 使用一个变量的内容来指定LIST项目

以下是一个特别的应用脚本来转换适应一个特定的schema的HTML文件到PHP文件,转化通过取出最初的25行和最后的21行,用PHP标签替换来提供页眉和页脚来完成的:

[carol@octarine ~/html] cat html2php.sh
#!/bin/bash
# specific conversion script for my html files to php
LIST="$(ls *.html)"
for i in "$LIST"; do
     NEWNAME=$(ls "$i" | sed -e 's/html/php/')
     cat beginfile > "$NEWNAME"
     cat "$i" | sed -e '1,25d' | tac | sed -e '1,21d'| tac >> "$NEWNAME"
     cat endfile >> "$NEWNAME"
done

既然这里我们没有做一个行计数,就没有办法知道开始删除的行直到到达的行的行数。这个问题可以用 tac, 它将在文件中保留行。

你可能感兴趣的:(shell,职场,语句,休闲)