## 重定向输入和输出 重定向是根据不同需求将标准输出到控制台的信息输出到其他的媒介,如将输出到控制台的警告信息重定向输出到日志文件便于查询。 或将从标准输入设备--键盘读取数据重定向成从文件中读取数据。 ### 一、输出重定向`>` * 输出重定向常用的方式是将输出到控制台的信息重定向输出到文件中。输出重定向符是 大于号 >,命令格式如下: 命令 > filename * 只要是有输出信息的命令都可以使用输出重定向符。 ls -a > filename date > filename echo "login USER:$USER" > filename * 输出重定向符是大于号,需要注意的是,如果重定向输出的文件不存在,系统会首先创建文件然后将信息输入到文件中,如果文件存在, 则直接将信息输入到文件中。通过输出重定向符每次输出的信息都会将文件中已经存在的信息覆盖, 所以**如果想向文件中追加信息而不覆盖已存在的信息,需要使用重定向符(>>)**,下面通过例子说明。 * 例:将脚本执行过程中的信息重定向输出到日志文件。 #!/bin/bash # 输出重定向 # 日期格式化到变量 datestr=`date +%y%m%d` # 日志文件命令 filename=/home/hadoop01/bash01/log_${USER}_${datestr}.log # 将当天日期重定向输出到日志文件 date > $filename # 脚本执行信息追加到日志文件 echo "bash script begin!" >> $filename # 切换到工作目录 cd /home/hadoop01/bash01 # 将信息追加到日志文件 echo "select /home/hadoop01/bash01" >> $filename # 创建工作目录 mkdir mapreduce01 # 将信息追加到日志文件 echo "create log dir:/home/hadoop01/bash01/mapreduce01" >> $filename # 切换工作目录 cd mapreduce01 # 将信息追加到日志文件 echo "select /home/hadoop01/bash01/mapreduce01" >> $filename # 拷贝文件到当前目录 cp /home/hadoop01/bash01/bash04.sh . # 将信息追加到日志文件 echo "copy /home/hadoop01/bash01/bash04.sh to /home/hadoop01/bash01/mapreduce01" >> $filename # 将脚本执行结束信息追加到日志文件 echo "bash script end!" >> $filename * 可以通过:>输出定向符清除文件内容,命令格式如下: :> filename * :>会把文件 filename 截断为 0 长度,就是清除文件内容。 * 如果文件不存在, 那么就创建 一个空的文件。 * :>是一个占位符和定向符组成。 * 例:将输出信息重定向到文件后,将文件信息清除。 #!/bin/bash # :> # 定义变量,文件 hello.txt 不存在 FILE_DIR=/home/hadoop01/bash01/dir1/hello.txt # 将标准输出到文件中 # 将"Hello Hadoop!.Hello Bash!"写到/home/hadoop01/bash01/dir1/hello.txt 中 # 不会在控制台输出,输出重定向到文件中了 echo "Hello Hadoop!.Hello Bash!" > "$FILE_DIR" # 显示文件/home/hadoop01/bash01/dir1/hello.txt 内容:"Hello Hadoop!.Hello Bash!" cat "$FILE_DIR" # 清空/home/hadoop01/bash01/dir1/hello.txt 文件的内容 :>"$FILE_DIR" # 显示文件内容,为空 cat "$FILE_DIR" exit 0 * 例:将输出信息重定向到文件,比较>与>>。 #!/bin/bash # > >> # 定义变量 FILE_DIR=/home/hadoop01/bash01/dir1 # 将"Hello hadoop01!"写入文件 hadoop011.txt echo "Hello hadoop01!" > "$FILE_DIR"/hadoop011.txt # 显示文件内容:"Hello hadoop01!" cat "$FILE_DIR"/hadoop011.txt # 将"Hello MapReduce!"写入文件并覆盖原内容"Hello hadoop01!" echo "Hello MapReduce!" > "$FILE_DIR"/hadoop011.txt # 显示文件内容:"Hello MapReduce!" cat "$FILE_DIR"/hadoop011.txt # 向文件中写入内容:"Hello hadoop01!" echo "Hello hadoop01!" > "$FILE_DIR"/hadoop012.txt cat "$FILE_DIR"/hadoop012.txt # 向文件中追加内容:"Hello MapReduce!",在文件尾部添加,不覆盖原内容 echo "Hello MapReduce!" >> "$FILE_DIR"/hadoop012.txt # 显示内容: # Hello hadoop01! # Hello MapReduce! cat "$FILE_DIR"/hadoop012.txt exit 0 ### 二、输入重定向 * 输入标准设备是键盘,输入重定向是将从标准输入设备读取数据重定向到其他媒介,通常情况下,最常见的是重定向输入到文件, 从文件中读取数据到命令,和输出重定向正 好相反。命令格式如下: 命令 < filename * 为了测试方便,创建一个文本文件 file.txt,文件内容如下: abc efg hello java shell script linux hadoop 100 ok 50 aaa 355 399 25 22 19 99 1000 345 33 * 例子:使用输入重定向符<将文件内容输出到命令 more < file.txt more file.txt cat < file.txt cat file.txt sort < file.txt sort -r < file.txt sort file.txt sort -r file.txt * 双小于号<<是内联输入重定向符,使用方式和输入重定向符<不同,必须要给定结束符, 并且不是从文件中直接读取数据。通常的用法如下面的例子。 * 例:将控制台输入的信息重定向输入到文件 cat > file << end 将控制台的输入 重定向到文件 file 中 end