Shell入门-02
1.重定向 标准输入(<) 标准输出 标准错误重回定向
程序 = 指令 + 数据
命令 变量
在程序中,数据如何输入?又如何输出?
数据输入:键盘 – 标准输入,但是并不是唯一输入方式
--stdin
不进入交互式界面,直接输入密码
echo “123456” | passwd –stdin “username”
例如:功能添加用户,useradd.sh user.txt文本文档1000个用户
./useradd.sh < user.txt
while line ; do
循环体 $line
done < /etc/passwd
数据输出:显示器 – 标准输出,但并不唯一输出方式
ls /etc/ > a.txt
fd文件标识符 0-9 ---- 相当于给文件分类;
被定义的标识符 0—标准输出 1—标准输入 2—标准错误(错误输入输出)
常见的重定向的符号:
1.标准输出
0> -- 覆盖重定向、非常的危险 重定向后数据将会丢失
set –C 关闭重定向功能,剪掉C的功能 C的功能就是去掉重定向
set +C 加上重定向
>| 强制重定向
>> -- 追加重定向 将数据内容追加到文件末尾 不覆盖
less more
cat a.txt | more/less
2.标准输入
1< a < b b的内容交给a
tr 替换 tr set [set2] 默认进入交互式界面手动输入替换内容
tr set [set2] < file.txt
tr abc ABC < /etc/passwd
| |
单个字符
tr abc ABC < /etc/passwd > /etc/passwd
<< cat 查看,将多行数据同时输入
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/ &> /dev/null
2.管道符 – tee
command1|command2|command3|… …
前一个命令的执行结果交给后一个命令来执行;
【linux思想:结合小功能实现大功能】
free –m
m --- 单位
free –m|grep “^Mem” | cut –d’ ’ –f19
free –m|grep “^Mem” | awk ‘{print $3}’
s = ` free –m|grep “^Mem” | cut –d’ ’ –f19`
if [$s –gt 1000];then
告警
fi
tee命令
一路输入,两路输出
Tee /tmp/tee.out //如果没有文件会创建,如果默认文件有内容会覆盖
练习:
将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.out文件中;
head -5 /etc/passwd | tr [a-z] [A-Z] > /tmp/passwd.out
将登录至当前系统上用户信息汇总的后3位信息转换为大写后保存至/tmp/who.out文件中;
who | tail -3 | cut –d’ ’ –f1 | tr [[:lower:]] [[:upper:]] | tee /tmp/who.out
tail 查看文件尾部多少行(默认10行)
-n tail –n 5 /etc/passwd = tail -5 /etc/passwd
-f 实时查看文件更新查看
Sleep 等待多长时间后再执行
tail –f /vaar/log/message
head 查看文件头部多少行(默认10行)
-n head –n 5 /etc/passwd = head -5 /etc/passwd
head -20 /etc/passwd | tail -10
3.文本处理工具---wc,cut,sort,uniq
wc
Word count 统计文本文件中的字符个数
行数14 字符个数72 文件大小711字节 文件大小
–c 文件大小
-l 看行数
-w 字符个数
cut
用来做文件分割
-d 指定分隔符(单个) (delimiter)
-f 指定多少列数 –f2输出第二列
-f1,3输出第一列到第三列
-f1-3
history | cut –d’ ’ –f3 /etc/passwd
--output-delimiter=’xx’
cut –d’ ’ –f1,3 /etc/passwd
cut –d’:’ –f1,3 –output-delimiter=’ ’ /etc/passwd
格式化输出
Cut的局限性:
**-d 指定分隔符不能同时指定多个**
**不能做高级的格式化输出** 需要熟练掌握awk
sort
排序命令,默认将第一个字符(数字、字母、特殊符号、空格)按照ASCII码值来进行排序
-n 按照数值大小排序 特殊字符和字母在数字前面
-r 倒序排列
-f 忽略字符大小写
-k 已指定字段的第几段进行排序
-u uniq 排序去重复,重复的不显示
-t指定字段分隔符
uniq
连续且相同,才被视为重复
建议,先排序后去重
Uniq –c 统计某些字符重复的次数
Sort filename | uniq –c
-d 重复的行
练习:
显示/etc/passwd的第六行到第十行,按照第三个字段进行数值大小排序,最后显示第一列