重定向和管道符:
1、重定向
程序 = 指令 + 数据
命令 + 变量
数据输入:键盘 --标准输入,但是并不是唯一输入方式;
--stdin
echo "123456"| passwd --stdin "username"
例如:功能添加用户 useradd.sh user.txt文本文档1000个用户
./useradd.sh a
...
/.useradd.sh z
./useradd.sh<user.txt(注意,写在user.txt里的文件要按列写)
while linr;do
done</etc/passwd
数据输出:显示器 -- 标准输出,但并不是唯一的输出方式
ls /etc/ >a.txt
fd 文件标识符 0-9-- 相当于给文件分类;
0 1 2
0--标准输入
1--标准输出
2--错误输入输出
常见重定向符号
1、标准输出
> 覆盖重定向
set - C 这个是去掉覆盖重定向功能
>| 强制重定向
>> 追加重定向,不覆盖
2、标准输入
< tr 替换文件内容
用法:tr 原来的 现在的<file.txt
<< 将多行数据同时输入
cat >>zat.txt<<ECF
>1
>2
>EOF
3、错误输出
2>
扩展:不需要输出内容,只需要输出状态
ls /etc/ >/dev/null 2>/dev/null
&> &>>==2&>1
ls /etc/ &>/dev/null
2、管道 - tee
command1|command2|command3|.。。
前一个命令的执行结果交给后一个命令来执行;
free -m |grep "^Mem"|cut -d -f19
tee 一路输入,两路输出
tee /tmp/tee.out
如果没有文件,会创建,默认如果文件存在有内容,会覆盖;
练习:
将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.outwen文件中
head -5 /etc/passwd |tr [a-z] [A-Z]>/tmp/passwd.out
将登录至当前系统上用户信息汇总的后三位信息转换为大写保存至/tmp/who.out
who |tail -3
3、文本处理工具 --wc,cut,sort,uniq
wc
word count 统计文本文件中的字符数量
行数 -l 字符个数 -w 文件大小 -c 文件名
cut
用来做文件分割
-d 指定分隔符
-f 指定输出的列数据
【cut 的局限性:1、-d指定分隔符,不能同时指定多个2、不能做高级的格式化输出:所以我们要熟练掌握awk】
sort 排序命令
根据ASCLL码来进行排序
常用参数:
-r 逆序
-f 忽略字符的大小写
-t DELIMITER指定字符段分隔符
-k #已指定字符的第几段进行排序
-n 指定以数值大小进行排序
-u uniq 排序去除重复,重复不显示
uniq
连续且相同的命令去重
建议先排序后去重
-c显示重复了多少次,统计重复次数
-d仅仅显示重复过的行
-
脚本练习题:
批量创建用户
if id $* &>/dev/null;then
echo "这个用户已经存在"
else
for i in $*;do
useradd $i
echo "123456"|passwd --stdin "$i" &>/dev/null
echo "用户$i添加成功"
done
exit 0
fi
学SHELL的第二天
原文:https://www.cnblogs.com/zrxuexi/p/11347374.html