一、输入重定向和输出重定向
通常计算机的I/O(输入/输出)设备为键盘和显示器,因此当我们执行cat命令而不加任何参数时,命令会等待用户通过键盘输入数据;而当我们为cat命令增加了参数/etc/rc.d/rc.sysinit后,cat命令的输入源变成了文件/etc/rc.d/rc.sysinit。这个过程就是输入重定向。如果cat的结果不显示在屏幕中,而是输出到某个文件中,其过程就是输出重定向。
二、管道
管道事实上是一种重定向的过程。管道的一方是数据的输入端,一方是接收端。bash也支持管道,其形式为:
# COMMAND1 | COMMAND2
解释:
程序执行的过程可能是:读入数据-->执行命令-->输出结果。根据此过程,原本COMMAND1执行的结果应该显示在屏幕上,但使用管道后,COMMAND1的执行结果会被COMMAND2当做输入数据流使用。
例如使用cat命令查看 /etc/rc.d/rc.sysinit 这个文件时,会发现此文件非常长,cat命令执行后光标直接跳至文件底部,给阅读造成不便。这时我们可以使用管道的形式用less来查看这个文件:
# cat -n /etc/rc.d/rc.sysinit | less
此处less命令不加参数,而是使用cat命令的执行结果作为参数。
再比如用户登陆时需要密码,通过键盘输入密码是默认形式,但为了安全起见,我们可以对密码输入进行重定向,选择从文件读入密码。可以使用以下命令:
# echo pass123 | passwd --stdin openstack
我们也可以将某个变量作为输入数据传递给下一个命令。例如要新建用户user1,其家目录为/users/user1,密码同用户名,可使用如下操作:
# UserName=user1
# mkdir /users
# useradd -d /users/$UserName $UserName
# echo $UserName | passwd --stdin $UserName
注意passwd命令使用了选项 --stdin (Standard Input 的简写形式),意为标准输入,即默认输入,与之对应的有 --stdout (Standard Output),意为标准输出,即默认输出——显示器/监视器。
* 后续文章中将详细介绍输入输出重定向和管道,此处只做简要概述
本文出自 “重剑无锋 大巧不工” 博客,请务必保留此出处http://wuyelan.blog.51cto.com/6118147/1405402
3_Shell语言———输入输出重定向和管道概述,布布扣,bubuko.com
原文:http://wuyelan.blog.51cto.com/6118147/1405402