shell 脚本——第二节课 重定向和管道符
1、重定向
程序 = 指令 + 数据
命令 变量
在程序中,数据如何输入? 又如何输出?
数据输出:键盘 -- 标准输入? 又如何输出?
--stdin
echo "123456"|passwd --stdin "username'
例如: 功能添加用户 useradd.sh user.txt文本文档1000个用户
./useradd.sh a
./useradd.sh b
...
./useradd.sh < user.txt
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 替换文件内容
tr set1 [set2] < file.txt
<< 将多行数据同时输入
cat >>a.txt<<EOF
>1
>2
>3
>EOF
3、错误输出
2 > 2>>
扩展:不需要输出内容,只需要输出状态;
ls /etc/ > /dev/null 2> /dev/null
if[$? -eq 0];then
循环体
fi
&> &>> == 2&>1
ls /etc/ $> /dec/null
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 //如果没有文件,会创建,默认如果文件存在有内容,会覆盖;
tail 查看文件尾部多少行(默认10行)
-n tail -n 5 /etc/passwd == 简写 tail -5 /etc/passwd
-f 实时查看文件更新内容
tail -f /var/log/message
head 查看文件头部多少行 (默认十行)
-n # 前#行, 简写 -#
取 10 - 20行 :head -20 /etc/passwd | tail -10
3、文本处理工具 - wc,cut,sort,uniq
wc
word count 统计文本文件中的字符个数
用法 wc filename
行数 字符个数 文件大小(字节) 文件名
-l
-w
-c
cut
用来做文件分隔
-d 指定分隔符(delimiter)
-f 指定输出的列数据
--output-delimiter='xx'
【cut的局限性:1、-d指定分隔符,不能同时指定多个2、不能做高级的格式化输出;所以我需要熟练掌握awk】
sort
排序,默认查看第一个字符(包括数字字母以及空格和特殊符号),以及ASCLL码来排序(大小写不是)
-n 按数字大小排序
-r 逆序
-t -k 指定分隔符以及指定按照那一列进行排序
-f 忽略字符大小写
-u uniq去重复
uniq
连续且相同的命令,才被视为重复
建议,先排序,后重序
虚无的 繁华里 有谁在等你吗
回头看 是孤独 留下的痕迹啊