bash shell 默认会将空格,制表符,换行符当做字段分隔符。
for命令
基本格式:
for var in list
do
commands
done
或者
for var in list; do
commands
done
意义:定义变量var,并且用变量var遍历list参数定义的一系列值。
解释:var定义的变量可以在for循环之后(done)继续使用。
list参数中,提供了迭代中要用的一些列值,
for命令默以空格 or Table作为list列表中内容的分隔符。
可以通过几种不同的途径来指定list列表中的值。
在每个迭代中,变量VAR会包含列表中当前值。
在do和done之间可以是一条或多条命令。
list列表中使用中的规则与特殊情况:
1、单引号的特殊处理,使用转义字符(反斜线)来将单引号转义
使用双引号来定义用到的单引号的值
eg:
for TEST in I don\'t know if "this'll" work
do
echo "word:$TEST"
done
2、list可以定义成变量
eg:
LIST1='Alabama Alaska Arizona Shanghai Beijing'
LIST2=$LIST1" Shenzhen"
for STAT in $LIST2
do
echo "Have you ever visited $LIST2"
done
3、list参数可以定义成命令,即用反引号来执行任何能产生输出的命令,然后在for命令中使用该命令的输出;
eg:
FILE=/home/test/states
for STATE in `cat $FILE `
do
echo "Visit beautiful $STAT"
done
/home/test/states 文件内容:
beijing
shanghai
tianjin
hebei
shenzhen
guangzhou
4、list参数中可以用通配符,如用for命令来自动遍历满是文件的目录
eg:
for FILE in /home/test/*
do
if [ -d "$FILE" ]
then
echo "$FILE is a directory"
elif [ -f "$FILE" ]
then
echo "$FILE is a file"
fi
done
在linux中文件名包含目录名和文件名是合法的,要容纳这种值,所以用双引号""将$FILE括起来。
4、bash用默认用空格、制表符来划分list列表中的每个值。如果单独的数据中有空格,那么也必须用双引号括起这些值。
eg:
for TEST in China Shanghai "New York" "New Mexico"
do
echo "Not going to $test"
done
5、在shell脚本中临时更改IFS环境变量的值来限制一下被bash shell当作字段分隔符的字符。
eg:
IFSOLD=$IFS
#保留IFS变量的默认值
IFS=$'\n'
#为IFS赋新值,使bash shell只能识别换行符。
使用冒号作为分隔符:IFS=:
使用换行符、冒号、分号和双引号作为字段分隔符IFS=$'\n:;'"
shell 代码部分,例如for命令等
IFS=$IFSOLD #恢复默认值
C语言风格的for命令 即for (( ))
格式:
for (( variable assignment; condition; iteration process ))
do
commands
done
variable assignment :变量赋值
condition:条件
iteration process:迭代过程
eg:
for (( i=1;i<=10;i++ ))
do
echo "the next number is $i"
done
C语言风格的for命令允许定义多个变量
eg:
for (( a=1,b=10;a<=10;a++,b-- ))