标准IO及管道

标准输入输出
标准输入:STDIN       输入源默认是键盘
标准输出:STDOUT   缺省是终端
错误输出:STDERR    默认也是终端

输出重定向
>  输出重定向               ls -R > /tmp/abc.txt                                          //本来输出到屏幕的输出到文件中。
2> 错误输出重定向       find /etc -name passwd > find.out                     //则正确的信息输入到find.out中,错误的信息输出到屏幕
                                     find /etc -name passwd 2> find.err                    //则错误的信息输出到find.err中,正确的信息输出到屏幕
                                     find /etc -name passwd > find.out 2> find.err     //正确和错误的信息分别输出到不同文件
                                     find /etc -name passwd 2> /dev/null                  //空设备,把错误信息丢弃掉
&> 正确的和错误的信息都输出到一个文件        find /etc -name passwd &> find.all
>>  输出追加              在原来的基础上加

管道 pipe
将前面一条命令执行的结果输出到一段程序上面

ls |wc -l                     //统计文件数目
ls -l |more                 //分页显示
ls |grep vsfd
echo "test mail" | mail -s "test" [email protected]     主题 邮箱
echo "test print" | lpr                               //输出到默认打印机
echo "test print" | lpr -P printer_name      //输出到制定的打印机
find /etc -name passwd 2>&1 | less         //默认情况下错误信息不会输出到管道,用这个符号可以实现将正确和错误的信息输出到管道上

find /etc -name passwd;ls               //两条分别执行
find /etc -name passwd;ls > abc      //两条分别执行
(find /etc -name passwd;ls) > abc   //两条执行的结果都重定向

多重管道 
tee命令         //既可以输出又可以继续进行管道
ls -lr /etc |tee stage1.out | sort | tee stage2.out | uniq | tee stage3.out | sort -r | tee stage4.out | less

输入重定向  < 
tr 'A-Z' 'a-z' < .bash_profile  //将bash_profile中的大写字母转换为小写字母。等价于:cat .bash_profile | tr 'A-Z' 'a-z'

输入追加  << 
将多次输入的结果一次输出到邮件、文本、打印机等
mail -s "Please Call" [email protected] << ABC    //关键字"ABC",也可以是其他的
>hi,Jim
>   aaaaa
> bbbbbb
>....
>ABC                //直至输入关键字,邮件才结束

循环语句 
例一:给三个人发邮件
for NAME in joe jane julie
do
   ADDRESS="[email protected]"
   MESSAGE="Projects are due today!"
   echo $MESSAGE | mail -s Remember $ADDRESS
done

例二:建立三个用户,初始密码为"passwd"
for NAME in admin redhat1 redhat2
do
    useradd $NAME
    echo "passwd"|passwd --stdin $NAME   //passswd命令的参数"--stdin"指:passwd的输入来自于前面的管道
done

例三:建立10个用户,初始密码为"passwd"
for num in $(seq 1 10)
do
   USER="Admin$num"
   useradd $USER
   echo "passwd" |passwd --stdin $USER
done

例四:探测网络
for n in {1..20};do
     host=192.168.0.$n
     ping -c2 $host &> /dev/null       //ping -c2 表示ping两个数据包,如果不加-c2的话会一直ping下去。
     if[$?=0];then                              //$?用来返回结果。如果前一次成功则返回:0;失败则返回:1-255的值。
         echo "$host is UP"
     else
         echo "$host is DOWN"
     fi
done

猜你喜欢

转载自blog.csdn.net/pengchengliu/article/details/80562609