Shell标准输入、输出和错误的示例分析-创新互联
这篇文章主要介绍了Shell标准输入、输出和错误的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
成都创新互联是专业的梁平网站建设公司,梁平接单;提供成都网站制作、网站设计、外贸网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行梁平网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!文件描述符(fd):文件描述符是一个非负整数,在打开现存文件或新建文件时,内核会返回一个文件描述符,读写文件也需要使用文件描述符来访问文件。
内核为每个进程维护该进程打开的文件记录表。文件描述符只适于Unix、Linux操作系统。
8.1 标准输入、输出和错误
文件描述符 | 描述 | 映射关系 |
0 | 标准输入,键盘 | /dev/stdin -> /proc/self/fd/0 |
1 | 标准输出,屏幕 | /dev/stdout -> /proc/self/fd/1 |
2 | 标准错误,屏幕 | /dev/stderr -> /proc/self/fd/2 |
8.2 重定向符号
符号 | 描述 |
> | 符号左边输出作为右边输入(标准输出) |
>> | 符号左边输出追加右边输入 |
< | 符号右边输出作为左边输入(标准输入) |
<< | 符号右边输出追加左边输入 |
& | 重定向绑定符号 |
输入和输出可以被重定向符号解释到shell。
shell命令是从左到右依次执行命令。
下面n字母是文件描述符。
8.3 重定向输出
1)覆盖输出
一般格式:[n]>word
如果n没有指定,默认是1
示例:
打印结果写到文件:echo "test" > a.txt
当没有安装bc计算器时,错误输出结果写到文件:echo "1 + 1" |bc2 > error.log
2)追加重定向输出
一般格式:[n]>>word
如果n没有指定,默认是1
示例:
打印结果追加到文件:echo "test" >> a.txt
当没有安装bc计算器时,错误输出结果追加文件:echo "1 + 1" |bc2 > error.log
8.4 重定向输入
一般格式:[n] 如果n没有指定,默认是0 示例: a.txt内容作为grep输入:grep "test" --color < a.txt 1)覆盖重定向标准输出和标准错误 两种格式重定向标准输出和标准错误: &>word和>&word 等价于 >word 2>&1 &将标准输出和标准输入绑定到一起,重定向word文件。 示例: 当不确定执行对错时都覆盖到文件:echo "1 + 1" |bc &> error.log 当不确定执行对错时都覆盖到文件:echo "1 + 1" |bc > error.log 2>&1 2)追加标准输出和标准错误 追加格式:&>>word 等价于>>word2>&1 当不确定执行对错时都追加文件:echo "1 + 1" |bc &>> error.log 将标准输出和标准标准输入追加重定向到word: <<[-]word here-document delimiter 从当前shell读取输入源,直到遇到一行只包含delimiter终止,内容作为标准输入。 将eof标准输入作为cat标准输出再写到a.txt: /dev/null是一个空设备,向它写入的数组都会丢弃,但返回状态是成功的。与其对应的还有一个/dev/zero设备,提供无限的0数据流。 在写Shell脚本时我们经常会用到/dev/null设备,将stdout、stderr输出给它,也就是我们不想要这些输出的数据。 通过重定向到/dev/null忽略输出,比如我们没有安装bc计算器,正常会抛出没有发现命令: 这就让标准和错误输出到了空设备。 忽略标准输出: 忽略错误输出: 博客地址:http://lizhenliang.blog.51cto.com QQ群:323779636(Shell/Python运维开发群) read命令从标准输入读取,并把输入的内容复制给变量。 命令格式: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars][-p prompt] [-t timeout] [-u fd] [name ...] -e 在一个交互shell中使用readline获取行 -r 不允许反斜杠转义任何字符 -s 隐藏输入 -a array 保存为数组,元素以空格分隔 -d delimiter 持续读取直到遇到delimiter第一个字符退出 -i text 将test文本作为 -n nchars 读取nchars个字符返回,而不是等到换行符 -N nchars 读取nchars个字符返回,除非遇到文件结束符或超时,其他分隔符都被忽略 -p prompt 提示信息 -t timeout 等待超时时间,秒 -u fd 指定文件描述符号码作为输入,默认是0 name 变量名 示例: 感谢你能够认真阅读完这篇文章,希望小编分享的“Shell标准输入、输出和错误的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习! 另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。8.5 重定向标准输出和标准错误
# cat << eof
123
abc
eof
123
abc
# cat > a.txt << eof
> 123
> abc
> eof
8.6 重定向到空设备
# echo "1 + 1" |bc >/dev/null 2>&1
# echo "test" >/dev/null
# echo "1 + 1" |bc 2>/dev/null
8.7 read命令
获取用户输入保存到变量:
# read -p "Please input your name:" VAR
Please input your name: lizhenliang
# echo $VAR
lizhenliang
用户输入保存为数组:
# read -p "Please input your name:" -a ARRAY
Please input your name: a b c
# echo ${ARRAY[*]}
a b c
遇到e字符返回:
# read -d e VAR
123
456
e
# echo $VAR
123 456
从文件作为read标准输入:
# cat a.txt
adfasfd
# read VAR < a.txt
# echo $VAR
adfasfd
while循环读取每一行作为read的标准输入:
# cat a.txt |while read LINE; do echo$LINE; done
123
abc
分别变量赋值:
# read a b c
1 2 3
# echo $a
1
# echo $b
2
# echo $c
3
# echo 1 2 3 | while read a b c;do echo"$a $b $c"; done
1 2 3
名称栏目:Shell标准输入、输出和错误的示例分析-创新互联
文章位置:http://ybzwz.com/article/doojee.html