第七章:标准的输入/输出和管道


Linux提供三种IO
STDIN:standard INPUT 标准输入:默认键盘
STDOUT :standard OUTPUT 标准输出 :默认终端
STDERR::standard ERROR 错误输出:默认终端
 
重定向
> :正确输出重定向
2> :错误输出重定向
&> :所有结果重定向
>> :追加 (正确的追加)
2>> &>> :错误的追加、所有追加
 
&> /dev/null :丢弃全部结果(尽可能的把过程丢掉)
2>&1 :把错误的当正确输出
管道 | (错误的无法通过管道,但是可以通过2>&1 将错误的信息作为正确的输出)
command1|command2|command3......
 
less : ls -l /etc | less //将前面命令执行的结果作为分屏显示的输入
mail : echo "test email" | mail -s "test" user1@example.com
lpr : echo "test print" |lpr
echo "test print" | lpr -P printer_name
重定向不能重定向到文件里面,到文件里面就结束了,智能重定向到屏幕上才可以继续管道。
find /etc/ -name passwd 2>&1 >find.out |wc -l
 
合并输出()
(cal 2017,cal 2018) > cal.txt
 
tee 重定向多个结果
|tee file.txt |tee aa.txt | tee a.txt

 键盘作为标准的输入设备
输入重定向
<
cat < /etc/passwd :原本cat是捕捉标准输入源,现/etc/passwd文件的内容作为输入源。这个过程完成了一次输入重定向。
 输入重定向作用:
1、tr :转换功能
tr `A-Z` `a-z` < .bash_profile 将文件中的所有大写转换成小写
2、管道也使用了输入重定向
 
如何捕捉多行输入
<< :将多次输入的结果一次输出
mail -s "zhuti" user1@example.com << END
XXXXX
XXXXX
END //END 作为结束符
 
cat >> test <<END
****
****
****
END //结束符

for循环
for NAME in joe jane julie
do
  ADDRESS="$NAME@example.com"
  MESSAGE="Projects are due today!"
  echo $MESSAGE |mail -s Reminder $ADDRESS
done
 
作业
1、批量建用户  test1-20
2、给你一个用户列表,依照用户列表,批量新建用户。
3、给你一个用户列表,依照用户列表,批量新建用户,并且用户的密码 是123456
4、给你一个用户列表,依照用户列表,批量新建用户,并且用户的密码 是用户名
 
#!/bin/bash
#create new user
for NAME in $(cat /tmp/userlist)
  do
    useradd $NAME
    echo $NAME |passwd $NAME --stdin
    echo "USER:$NAME create successful"
  done

 
第二题
1、创建一个用户列表
2、依据用户列表来创建用户
3、并且在用户的家目录下创建一个文件 员工规则
4、所有用户的默认密码为redhat
5、创建完某个用户的时候,显示已经创建成功
6、修改员工规则的去啊年 拥有人和拥有组均为该员工
7、在脚本执行过程当中,不允许出现其他提示(/dev/null)
 
for  USER in $(cat userlist)
do  
    useradd  $USER
    echo  "user $USER  created"
    echo  redhat |passwd  $USER --stdin > /dev/null
    cat  >> /home/$USER/rule<<EOF
rule
EOF
    chown $USER:$USER /home/$USER/rule
done

 
 
原文地址:https://www.cnblogs.com/ydfq/p/7011672.html