重定向和管道符
1、重定向
程序=指令+数据
命令 变量
在程序中,数据如何输入?又如何输出?
stdout, stdin, stderr的中文名字分别是标准输出,标准输入和标准错误
数据输入:键盘 ---(键盘并不是唯一的,但键盘是标准输入)
--stdin
echo "123456" | password --stdin "username"
while line;do
循环体
done < /etc/passwd
数据输出:显示器 ---标准输出(并不是唯一的输出方式)
ls /etc/ > a.txt 把显示的东西放到a.txt里。
fd 文件标识符0-9 --相当于给文件分类;
常用 0 1 2
0--标准输出
1--标准输入
2--错误输入输出
常见重定向符号
1、标准输出
> 覆盖重定向、非常危险
set -C去掉覆盖重定向的功能 +C是恢复 >| 是强制重定向
>> 追加重定向 追加到文件的最后 (more less 看文件安空格下一页)
2、标准输入
< a<b(把b的内容交给a) tr 替换文件内容
tr set1 [set2] <file.txt
<< cat 多行数据同时输入
cat >> a.txt<<EOF
>1
>2
>3
>EOF
3、错误输出
2>
扩展:不需要输出内容,只需要输出状态;echo $?
2>>
&> &>> ==2&>1
ls /etc/ &> /dev/null 不管前面的执行结果是否正确执行后面的
2、管道 --tee
command | command2 | command3 |... ...
前一个命令的执行结果交给后一个命令来执行;
[linux思想:结合小功能实现大功能]
tee 一路输入,两路输出
tee /tmp/tee.out //如果没有文件,会创建,默认如果文件存在有内容,会覆盖;