(九)Shell 输入输出重定向

#!/bin/bash
echo "大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。"
echo "一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。"
echo "同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。"

# 重定向命令列表如下:
:<<EOF
command > file    # 将输出重定向到 file
command < file    # 将输入重定向到 file
command >> file   # 将输出以追加的方式从定向到 file
n > file          # 将文件描述符为 n 的文件重定向到 file
n >> file         # 将文件描述符为 n 的文件以追加的方式重定向到 file
n >& m            # 将输出文件n和m合并
n <& m            # 将输入文件n和m合并
<< tag            # 将开始标记 tag 和结束标记 tag 之间的内容作为输入
# 文件描述符 0 通常是标准输入(STDIN)
# 文件描述符 1 是标准输出(STDOUT)
# 文件描述符 2 是标准错误输出(STDERR)
EOF

# 1. 输出重定向
echo "
输出重定向语法: command1 > file1"
echo "执行command1,并将输出存入file1"
echo " > :输出的内存会覆盖已存在的内容"
echo " >> :将新内容在文件末尾追加"
# 1.1 example1
who > users # 输出内容到users文件 :cat users查看
echo "balalalalaalalal" > users # 新内容覆盖旧内容
echo ">> 不会覆盖" >> users      # 不会覆盖

# 2. 输入重定向
echo "
输入重定向语法: command2 < file2"
echo "从键盘获取输入的命令会转移到 file2 文件读取内容"
wc -l users
wc -l < users

echo "
command1 < infile > outfile"
echo "同时替换输入和输出,执行command1,从文件infile读取内容,然后将输出写入到outfile中"
echo 1111111111 > infile
wc -l < infile > outfile

# 3. 深入讲解
echo "
标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。"
echo "
默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。"

# 3.1 stderr 重定向到 file
echo "
stderr 重定向到 file"
echo "command 2> file"  # 2:表示标准错误文件(stderr)
echo "command 2>> file"

# 3.2  stdout 和 stderr 合并后重定向到 file
echo "
stdout 和 stderr 合并后重定向到 file"
echo "command > file 2>&1"
echo "command >> file 2>&1"
echo "放在>后面的&,表示重定向的目标不是一个文件,而是一个文件描述符"
echo "2>1:stderr重定向到当前路径下文件名为1的 普通文件中"
echo "2>&1代表将stderr重定向到文件描述符为1的文件(即/dev/stdout)中,这个文件就是stdout在file system中的映射"

# 4. Here Document
echo "
Here Document:用来将输入重定向到一个交互式 Shell 脚本或程序"
echo "
基本形式:
command << delimiter
  document
delimiter"
echo "
作用:
将两个delimiter之间的内容(document),作为输入传递给command.
注意:
1. 结尾的delimiter 一定要顶格写,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 缩进
2. 开始的delimiter前后的空格会被忽略掉"

# 4.1 实例:计算行数
wc -l << EOF
  AA
  AA

  BB
EOF

# 4.2 实例: 查看文件内容
cat << EEE
A A A A
A A A DDSA DAS
123456
EEE

# 5. /dev/null 文件
echo "
/dev/null 文件
1. /dev/null 是一个特殊的文件,写入到它的内容都会被丢弃。
2. 如果尝试从该文件读取内容,那么什么也读不到。
3. 但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到禁止输出的效果。"

echo "
屏蔽stdout和stderr:
command > dev/null 2>&1"
# 这里的 2 和 > 之间不可以有空格,2> 是一体的时候才表示错误输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值