1、重定向
程序 = 指令(命令) + 数据(变量)
在程序中,数据如何输入?又如何输出?
数据输入:键盘--标准输入,但并不是唯一输入方式
--stdin
echo"123456" | passwd --stdin "username" 同一行输入密码和用户,不进入交互界面
while line;do
循环体$line
done < /etc/passwd
数据输出:显示器--标准输出,但并不是唯一输出方式
ls /etc > a.txt
fd文件标识符 0-9
0 1 2 被定义的标识符,剩下的可以自己手动来定义
0---标准输出
1---标准输入
2---错误输入输出(标准错误)
常见重定向符号
1、标准输出
> 覆盖重定向、非常危险(重定向后原数据会丢失)
set -C 关闭覆盖重定向
>| 强制重定向
>> 追加重定向,不覆盖
2、标准输入
< 替换文件内容
tr set1 [str2] < file.txt
tr abc ABC < /etc/passwd > /etc/passwd.bak 把/etc/passwd文件下的abc替换为ABC,输出到passwd.bak中
<< 将多行数据同时输入
cat>>a.txt<
>1
>2
>3
>EOF(输入完毕之后,写自己定义的退出)
3、错误输出
2>
扩展:不需要输出内容,只需要输出状态;
ls /etc > /dev/null
if[$? -eq 0];then
循环体
fi
2>>
&> &>> == 2&>1
2、管道 -tee
|(管道符)
command1 | command2 | command3 | ... ...
前一个命令的止盈结果交给后一个命令来执行
【Linux思想:结合小功能,实现大大功能】
free -m | grep "^mem" | cut -d' ' -f19
free -m | grep "^mem" | awk'{print $3}'
tee
一路输入,两路输出
tee /tmp/tee.out //没有文件会创建,默认如果文件内有内容,会被覆盖;
练习:
1、将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.out文件中
head -5 /etc/passwd | tr [a-z] [A-Z] > /tmp/passwd.out
2、将登陆至当前系统上用户信息汇总的后三位信息转换为大写后保存至/tmp/who.out文件中;
who | tail -3 | cut -d' ' -f1 | tr [a-z] [A-Z] > /tmp/who.out
tail 查看文件尾部多少行(默认10行)
-n tail -n 5 /etc/passwd == 简写 tail -5 /etc/passwd
-f 实时查看文件更新内容
tail -f /var/log/message
head 查看文件头部多少行(默认10行)
-n # 前#行,简写-#
取10-20行 head -20 /etc/passwd | tail -10