一、杂项知识整理
1、程序的数据流有三种:
输入的数据流,标准输入stdin(键盘)
输出的数据流,标准输出stdout(显示器)
错误输出流,标准输出stderr(显示器)
fd 文件描述符:标准输入0 标准输出1 错误输出2
2、重定向:输出重定向 > 特性:覆盖输出
输出重定向 >> 特性:追加输出,保留内容
错误输出重定向 2> 2>>
合并正常输出流和错误输出流
&> 覆盖重定向 &>>追加重定向
2 > &1 合并错误和标准输出
( COMMAND;COMMAND)合并多个程序的stdout。例如:
ls 2>1 将ls的错误输出重定向到1文件中,ls并没有报错因此正常输出并建立空文件1:
[root@localhost copytest]# ls 2>1
1 7.txt
[root@localhost copytest]# cat 1
ls xxx 2>1 将没有xxx这个文件的错误输出到文件1中
[root@localhost copytest]# cat aaa 2>1
[root@localhost copytest]# ls
1 7.txt
[root@localhost copytest]# cat 1
cat: aaa: 没有那个文件或目录
ls xxx 2>&1 不会生成1这个文件,不过错误跑到标准输出了
[root@localhost copytest]# ls xxx 2>&1
ls: 无法访问xxx: 没有那个文件或目录
[root@localhost copytest]# ls
7.txt
ls xxx > out1.txt 2>&1 合并错误和标准输出至out1
[root@localhost copytest]# ls xxx >out1.txt 2>&1
[root@localhost copytest]# ls
7.txt out1.txt
[root@localhost copytest]# cat out1.txt
ls: 无法访问xxx: 没有那个文件或目录
[root@localhost copytest]# ls /etc/issue > out2.txt 2>&1
[root@localhost copytest]# ls
7.txt out1.txt out2.txt
[root@localhost copytest]# cat out2.txt
/etc/issue
[root@localhost copytest]# (ls /;cat aaaaa) > out4.txt 2>&1
[root@localhost copytest]# ls
7.txt out1.txt out2.txt out3.txt out4.txt
[root@localhost copytest]# cat out4.txt
bin boot dev etc home lib lib64 media mnt opt(省略)
cat: aaaaa: 没有那个文件或目录
3、set命令:用于设置shell。
-C 当前shell进程有效,设置使文件不能被覆盖,防止误操作;
+C 取消文件不能被覆盖
-f 取消使用通配符
-n 只读取指令而不执行
-v 显示shell所读取的输入值
-l 记录for循环的变量名称
二、详细命令及事例
1、tr命令:对位转换,tr [OPTION]... SET1 [SET2] [< FILE]把输入的数据当中的字符,凡是在SET1定义范围内出现的,通通转换为SET2中出现的字符;
-d 删除文件中所有在set1中出现的内容
[root@localhost copytest]# tr -d ‘a-z‘ < /etc/issue COS 7.2 K \ #tr命令只是读取文件,不会修改源文件
-c 用set1中字符的补集替换set1,这里的字符集为ASCII。
[root@localhost copytest]# tr -c ‘a-z‘ < /etc/issue tr: "a-z" 后缺少操作数 当进行替换操作时必须给定两组字符串。 Try ‘tr --help‘ for more information. [root@localhost copytest]# tr -c ‘a-z‘ ‘*‘ < /etc/issue *ent*********ernel**r*on*an**m**d**l**n**r**s**v**t**o*[root@localhost copytest]#
此处给定格式后,a-z的补集是所有非小写字母,全部替换为*,支持通配符glob。
-s 删除文件中在set1的出现的重复的字符,只保留一个
[root@localhost testdir]# cat tr lsglalsjgllkksajldkglklkjfjfjjd asgaaasdjdjjdjdjdddjjkk aaaa [root@localhost testdir]# tr -s [[:alpha:]] < tr lsglalsjglksajldkglklkjfjfjd asgasdjdjdjdjdjk a
2、mail命令:用于收发邮件;
mail -s "标题" 地址或用户名 <<EOF(终止符)
mail -s "标题" 地址或用户名 < 文件(重定向输入至内容)
管道也可以将内容传递给mail,例如:
[root@localhost testdir]# cat /etc/issue | mail -s "hello" root
三、作业及练习(第一部分:课件第五部分重定向和管道)
1、cat /etc/issue | tr ‘a-z‘ ‘A-Z‘ > /tmp/issue.out
2、who | tr ‘a-z‘ ‘A-Z‘ > /tmp/who.out
3、[root@localhost copytest]# mail -s "help" root <<EOF > hello > i‘m $(whoami) > the system version is here,please help me to check it > thanks > $(uname -a) > EOF 您在 /var/spool/mail/root 中有邮件 [root@localhost copytest]# mail Heirloom Mail version 12.5 7/5/10. Type ? for help. "/var/spool/mail/root": 6 messages 1 new 2 unread U 1 user@localhost.local Tue Jul 26 10:01 138/5231 "[abrt] full crash report" 2 root Sat Jul 30 11:28 28/665 "hello" 3 root Sat Jul 30 12:57 22/800 "help" 4 root Sat Jul 30 12:58 22/800 "help" 5 root Sat Jul 30 12:58 22/800 "help" >N 6 root Sat Jul 30 13:00 22/792 "help" & 6 Message 6: From root@localhost.localdomain Sat Jul 30 13:00:06 2016 Return-Path: <root@localhost.localdomain> X-Original-To: root Delivered-To: root@localhost.localdomain Date: Sat, 30 Jul 2016 13:00:06 +0800 To: root@localhost.localdomain Subject: help User-Agent: Heirloom mailx 12.5 7/5/10 Content-Type: text/plain; charset=us-ascii From: root@localhost.localdomain (root) Status: R hello i‘m root the system version is here,please help me to check it thanks Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_ 64 x86_64 GNU/Linux
4、将root下文件列表显示成一行并用,隔开:
[root@localhost copytest]# ls /root | tr ‘\n‘ ‘ ‘ aaa.txt aa.txt abc.txt anaconda-ks.cfg mypython vimrc [root@localhost copytest]#
5、file1文件中的内容求和:
[root@localhost testdir]# cat file1.txt 1 2 3 4 5 6 7 8 9 10 [root@localhost testdir]# cat file1.sh #!/bin/bash # declare num_count=0 for num in $(cat file1.txt) do num_count=$[$num_count+$num] done echo "num_count1 = $num_count" # [root@localhost testdir]# bash file1.sh num_count1 = 55
6、删除windows文本文件中的^M字符:两种方法:
[root@localhost testdir]# cat -A test.txt | tr ‘^M$‘ ‘ $‘ weh $ asdlgh $ qwethl $ qwl lwwhet $ kweeh $ llhwet $
dos2unix 直接转换格式
7、只保留字符串中的数字和空格
[root@localhost testdir]# cat string.txt xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4 [root@localhost testdir]# cat string.txt | tr -d ‘[[:alpha:]][[:punct:]]‘ 1 2 3 4
本文出自 “静轩丶” 博客,谢绝转载!
原文地址:http://jingxuan.blog.51cto.com/11808130/1832016