shell 数据流重定向操作符总结

最近看了鸟哥私房菜关于shell数据流重定向的内容,总结一下。

操作符:

1.标准输入(stdin):代码为0,符号:< 或者<<

2.标准输出(stdout):代码为1,符号:>或者>>

3.标准错误输出(stderr):代码为2,符号:2>或者2>>

作用:

标准输出和标准错误输出可以将内容重定向输出到指定的设备(如打印机)或文件中

标准输入可以使用文件或其他输入替换手动输入

单箭头和双箭头的区别:

对于输出:

单箭头:当指定的文件不存在时,创建新文件写入数据;当文件存在时,清空原文件的内容写入数据。

双箭头:当指定的文件不存在时,创建新文件写入数据;当文件存在时,在原件内容的最后追加写入数据。

对于输入:

单箭头:将文件或其他输入作为标准输入。(<的左边必须是命令,<右边的输入内容作为命令的输入)

例子:/usr/bin/mailx -r "$MAIL_FROM" -s "$MAIL_SUBJECT. " "$MAIL_TO"  <$LOG/activity.log (将$LOG/activity.log文件的内容写入到邮件内容中)

双箭头:结束输入

ISQL="isql -U$LOGIN  -S$SERVER -w 600"
$ISQL << EOF9
$PASSWD

select * from tempdb..tmp_miss_bin
drop table tempdb..tmp_miss_bin
go

EOF9
上面代码表示首先ISQL代表连接数据库,使用<< ,然后接上任意合法的符号(这里使用EOF9)表示输入开始,下面遇到EOF9则表示输入结束。

两个EOF9包含的部分即为连接数据库的输入。首先密码登录,登录成功之后,进行一些数据库操作。

将标准输出和错误输出重定向到一个文件上:

grep "hehe"  file.log > one.log 2>one.log(这样做stdin和stderr能输出到one.log,但是因为同时输入,可能会造成次序的混乱)

grep "hehe"  file.log > one.log 2>&1 (正确,首先stdin重定向到one.log,然后使用2>&1表示stderr重定向至stdin,stderr在stdin之后输入到one.log中)

grep "hehe" file.log  &> one.log (另一种正确写法)

你可能感兴趣的:(shell,shell数据流重定向)