for命令:
for var in list
do
command
done
例:
for var in one two three four
do
echo $var
done
注意1:var的值会保持到脚本的最后,var的值为循环列表的最后一个值。
注意2:列表中的每个值是以空格区分的,可以用双引号包含空格或单引号的值。
读取的list也可以是一个变量:
list="one two three"
list=$list "four"
for var in $list
do
command
done
从命令读取值:
for var in $( cat demo.txt)
do
echo $var
done
demo.txt文件中可以是一行一行的数据,但是每行之间的单词有空格也会当成两个列表值
更改字段分格符:
IFS 环境变量,内部字段分隔符,可以通过修改这个环境变量修改解析数据的规则
IFS.OLD=IFS 修改之前先保存默认值
IFS=$'\n':;" 这个值会将换行符、冒号、分号、双引号作为字段分隔符,如何使用IFS字符解析数据没有任何限制。
例:
IFS.OLD=IFS
IFS=$'\n'
for var in $( cat demo.txt )
do
echo var;
done
IFS=IFS.OLD
这样只有换行符才会被解析为新数据的开始
用通配符读取目录:
for file in $HOME/* /home/Richard
do
if [ -d "$file" ] ; then
echo "$file is a dirctory"
elif [ -f "$file" ] ; then
echo "$file is a file"
fi
done
注意:在in后面可以使用多个目录通配符。
注意:为防止目录或文件名有空格,在输出时要用双引号包含变量,例:"$file"。
C语言风格的for命令:
for (( a = 1 ; a < 10 ; a++ ))
do
echo "The var is $i ";
done
注意:1.等于号两遍可以有空格。2.括号中的变量不以美元符号开头。
遍历/etc/passwd示例:
IFS.OLD=IFS
IFS=$'\n'
for line in $( cat /etc/passwd )
do
echo "line $line"
IFS=:
for word in $line
do
echo "word $word"
done
done
查找可执行命令示例:
所有可执行的命令都放在$PATH定义的中,所以只要在这些目录中查找可执行命令就行了
IFS.OLD=IFS
IFS=:
for directory in $PATH
do
echo "current directory id $directory"
for file in $directory/*
do
if [ -x $file ]; then
echo "The file $file can execute"
else
echo "The file $file cat not execute"
fi
done
done
总结:
for var in 1 2 3 4 5 普通列表
for var in $( cat demo.txt ) 命令替换
for var in /root/bin/* 使用通配符
for (( i = 0 ; i < 10 ; i++ )) 括号内同C语言