标准输入:从终端获得命令,对于计算机来讲,是从终端得到了命令,执行完了之后,结果和执行状态或者错误提示又会发回终端,这叫标准输出。linux
输入输出重定向就是从终端之外的别的地方获得输入,或者向终端之外的别的地方输出。shell
命令和说明:bash
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。 #文件描述符,能够理解为内核给打开的文件的标识,它和文件不是一一对应的,0标准输入,1标准输出,2标准错误
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容做为输入。函数
下面是详解:spa
输出重定向通常在终端命令行里的比较多,在脚本比较少。命令行
实例1:echo "hello linux!">t3.sh (hello linux就跑到t3,.sh里去了)想看的话须要cat t3.shcode
实例2:blog
demoFun(){ echo "这是个人第一个 shell 函数!" #这是函数主体,前一行后一行有大括号 } demoFun >t3.sh #这是个人第一个 shell 函数! 就跑到t3.sh里去了
原本须要从键盘获取输入的命令会转移到文件读取内容。排序
command < filename 意思是把c o m m a n d命令以f i l e n a m e文件做为标准输入生命周期
实例1:wc -l <t3.sh(以t3.sh做为标准输入之后,算一算t3里有几行文件)说实话,此处的做用和wc -l t3.sh是同样的,可是运行方法仍是不一样的。
实例2:commed < infile > outfile,从文件infile读取内容,而后将输出写入到outfile中。
好比:sort <name.txt >name.out,
从name.txt中获取文件内容,排序之后输出到name.out中
补充:重定向操做符
例子1:cat >> myfile <<MAYDAY #<<MAYDAY的意思是,把MAYDAY和下一个MAYDAY(别的没有歧义的字符也能够)之间的内容当作输入,重定向到cat中,而>>myfile会把cat的内容输出重定向到myfile文件中。
例子2:
$ sort << el #任意字符均可以,常见的是EOF #该命令的意思是把el和el之间的内容输入重定向到sort heredoc> 345 heredoc> 123 heredoc> ndj heredoc> abd heredoc> el #输出结果以下 123 345 abd ndj
通常状况下,每一个 Unix/Linux 命令运行时都会打开三个文件:
默认状况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。
若是但愿 stderr 重定向到 file,能够这样写:command 2 > file
若是但愿标准错误和标准输出都重定向到一个文件中,能够这样写:command > file 2>&1 #理解为把标准错误先重定向到标准输出中,再把标准输出重定向到file中。
任何重定向到这个文件:/dev/null的输出,都不会有结果,由于它禁止输出。
若是脚本中有大量的输出须要重定向,使用上面的临时重定向方式就很是繁琐,能够采用exec命令指定脚本生命周期内的重定向文件描述符,以下例子。
#!/bin/bash # 在脚本执行期间全部的标准输出都会保存到文件syslog exec 1> syslog #把全部的标准输出全都输出到syslog去 dir=/home/yarn/bash01 for file in $dir/* do if [ -d "$file" ] then echo "$file is a directory!" fi
#!/bin/bash exec 0< filename #标准输入来自filename,filename的内容是:hehe \n haha \n while read line do echo "From file parameter is $line" done #获得结果: hehe haha
经过exec命令把标准输入设备键盘重定向到文件,将配置信息写入到文件,在脚本中循环读取文件中的信息并赋值给变量并在脚本运行期间引用。经过read命令能够从命令行读取用户输入到的参数,当标准输入重定向到文件后,read命令一样能够从文件中读取记录。