shell 重定向
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入
输出重定向
重定向一般通过在命令间插入特地的符号来实现
command1 > file
执行命令1然后将输出的内容存入fiel1.
注意file中的所有内容都会被新的内容取代。如果需要将新的内容添加到file的文件末尾,
请使用 >>
操作符
实例
$ touch users //新建users文件
$ touch test.sh //新建脚本文件
$ vim users
#!/bin/bash
who > users
cat users
$ chmod +x test.sh
$ ./test.sh
输出结果
ali tty7 2019-09-19 17:43 (:0)
输出重定向覆盖原来的内容
#!/bin/bash
who > users
echo "test" > users
cat users
$ ./test.sh
输出结果
test
输出内容在文件末尾追加
#!/bin/bash
who > users
echo "test" >> users
cat users
输出结果
ali tty7 2019-09-19 17:43 (:0)
test
输入重定向
comm1 < file1
这样本来需要从键盘获取输入的命令会转移到文件读取内容
注意输出重定向是 大于号>,输入重定向是小于号<
实例
文件aa 中有四行字母
wc -l < aa
4
重定向深入讲解
一般情况下Unix/linux
命令运行的时候都会打开三个文件
标准输入 stdin
文件描述符为 0
Unix程序默认从stdin
读取数据
标准输出 stdout
文件描述符为 1 Unix程序默认向stdout
输出数据
标准错误文件 stderr
文件描述符为2 Unix程序将stderr
流中写入错误信息
如果希望把 stderr 重定向到file,可以这样写
$ command 2 > file
追加
$ command 2 >> file
如果希望将stdout和stderr合并后重定向到file,可以这样写
$ command > file 2>&1
或者
$ command >> file 2>&1
Here Document
是Shell中的一种特殊的重定向方式,用来将输入重定向到一个交互式Shell脚本或
程序。
基本形式
command << delimiter
dcument
delimiter
它的作用是将两个delimiter
之间的内容(document)
作为输入传递给command.
注意
结尾的delimiter
一定需要定格写,前面不能有任何字符,后面也不能以任何字符
包括空格和tab缩进
开始的delimiter
前后的空格会被忽略
实例在命令行中通过wc -l 命令计算出 Here Document 的行数
$ wc -l << EOF
你好
哈哈哈
www.xxx.com
EOF
3 # 输出结果为3行
$
也可以写到脚本中
#!/bin/bash
wc -l << EOF
你好
哈哈哈
www.xxx.com
EOF
输出结果
你好
哈哈哈
www.xxx.com
/dev/null文件
如果希望执行某个命令,但是又不希望在屏幕上显示输出结果,那么可以把输出
重定向到/dev/null
中
格式
command > /dev/null
/dev/null
是一个特殊的文件,写入到它的内容都会被丢弃,如果尝试从里面读取内容什么吔读取不到的
但是/dev/null
非常有用,如果把输出重定向到它,会起到禁止输出的效果。
例如屏蔽stdout stderr
command > /dev/null 2>&1
ls > /dev/null 2>&1
Shell 文件包含
和其他语言一样Shell也可以包含外部脚本,这样很方便的封装一些公用的代码作为一个独立的文件
语法格式如下:
. filename # 点号(.)和文件名中间有一空格
或者
sources filename
实例
创建两个Shell脚本文件
test1.sh
代码如下:
#!/bin/bash
url="subusu.com"
test2.sh
#!/bin/bash
#使用 . 号来引用test1.sh
. ./tset1.sh
#或者使用以下包含文件代码
# source ./test1.sh
echo "无效网址址:$url"
给test1.sh test2.sh
添加权限,其中被包含的文件不需要可执行权限
执行结果如下
无效网址址:subusu.com
Shell编程的基本语法可以完成了,接下来就是认真看书啦。