shell输入输出
时间:2010-05-13 来源:zyd_cu
标准I/O
标准输入/输出是软件工具设计原则里最基本的观念。它的构想是:程序应有一个数据来源,数据出口,以及报告问题的地方,它们分别叫作标准输入,标准输出和标准错误输出。
程序应该不知道也不在意其输入与输出背后是哪种设备,这些设备可能是磁盘文件,终端,磁带机,网络连接或者是另一个执行中的程序。程序启动时,这些标准位置都已打开,准备好被使用了。
使用read读取行
read将信息读入一个或多个变量,默认自标准输入读取行,并通过shell的$IFS进行分割。第一个单词赋给第一个变量,第二个单词赋给第二个变量,以此类推。如果单词多余变量个数,则所有剩下的单词,全赋给最后一个变量,read一旦遇到文件结尾,会以失败值退出。
read默认将\看作续行符,可通过-r参数将\解释为普通字符。
从文件读取变量
while IFS=: READ user pass uid gid fullname homedir shell
do
… 处理每个用户的行
done < /etc/passwd
#小技巧,任何命令都能用来将输入通过管道传送给read,如
cat /etc/passwd |
while IFS=: READ user pass uid gid fullname homedir shell
do
… 处理每个用户的行
done
以上代码读取/etc/passwd的每一行,并将各个字段依次独到user,pass等变量中,进行相应的处理。当遇到输入文件结尾时,read会以非0值退出,这个操作将终止while循环。
#重定向操作的不正确使用
while IFS=: READ user pass uid gid fullname homedir shell < /etc/passwd
do
… 处理每个用户的行
done
while循环永远不会结束,每一次执行while判断,都打开/etc/passwd一次,并且每次都处理该文件的第一行。
重定向
> 重定向标准输出( >> 追加)
< 重定向标准输入
program <> file,可为程序program提供读取与写入操作到file,其从file读取输入,将结果输出到file。
make 1> result 2> err 改变make程序的标准输出和标准错误输出,1可省略。
make > result 2>&1 将标准输出定向到result,把标准错误输出定向到文件描述符1描述的文件(此时1已被定向到了result),故标准错误输出也被定向到result。