1、特殊符号
相关例子,详见下图,
2、关于管道符
(1)、cut 分割
-d 分隔符 -f 指定段号 -c 指定第几个字符
举例子,见下图,
上图例子中,| 输出结果,cut 分割出后面想要的结果。一般情况下,-c 和 -d 、-f 不同时使用。
(2)、sort 排序
-n 以数字排序 -r 反序 -t 分隔符 -kn1/-kn1,n2
举例子,见下图,
可以注意到,红色框框里面的内容是按字母顺序排列的,这个就是 sort 作用的结果。sort 后面不加任何选项,则从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
关于ASCII码,百度百科的解释如下:
接着往下操作,见下图,
回车之后,进入下图,
随机输入上图红色框框的内容,保存后退出。使用 sort 查看文件 1.txt ,见下图,
可以看到上图的排列顺序是,先特殊符号,再数字,然后再字母,包括 * 号。以上就是 ASCII 码的排列顺序。
-n 选项是以数字排序,前面的特殊符号和字母,都默认为 0 。见下图,
-r 选项是反序的意思,见下图,
-t 后面跟分隔符,-kn1/-kn1,n2 ,这些用的比较少,了解即可。
(3)、wc
-l 统计行数 -m 统计字符数 -w 统计词
举个例子,见下图,
进入 2.txt 文件,编辑输入下图红色框框的内容,
保存后退出。接着统计 2.txt 的字符数,见下图,
可以看到,2.txt 的字符数是 8 ,为什么会是 8 呢?cat -A 之前说过,它可以查看 2.txt 文件里的所有内容,包括隐藏的。然后,就看到了每一行末尾的 $ ,表示的是换行符。所以,wc -m 2.txt 的结果是 8 。
接着对 -w 进行操作,见下图,
2.txt 里的内容有两行,所以显示的结果是 2 。再次进入 2.txt 编辑文件内容,见下图,
补充完上图内容后,保存并退出。再次查看统计词,见下图,
-w 是以空白字符作为分隔符的,所以结果显示为 3 。
(4)、uniq 去重复,-c 统计行数
输入命令 vi 2.txt ,回车,见下图,
增加上图红色框框的内容,保存并退出。接着往下操作,
发现 uniq 命令对 2.txt 的内容没有任何影响,再次进入文件 2.txt ,编辑内容如下,
将最后的1和2互换位置,然后保存退出。接着使用命令 uniq 2.txt 查看,见下图,
这时候,就会看到去重复了。这是有条件的去重复,必须两个同样的字符在前后位置,才能去重复。
一般情况下,uniq 和 sort 是一起使用的,见下图,
先排序,后去重复。这样子使用命令之后,就看不到重复的数值了。还可以使用 -c 选项来统计重复的次数,每一排前面的数字就是重复的次数。
(5)、tee
和 > 类似,重定向的同时还在屏幕显示,|tee -a 有追加作用
举例子,见下图,
从上图可以看出 |tee 的一个作用就是重定向,还有一个作用是把文件内容打印到屏幕上。
-a 选项有追加的作用,见下图,
再追加一次,再查看文件,见下图,
(6)、tr 命令
tr 替换字符,tr 'a' 'b',大小写替换 tr '[a-z]' '[A-Z]'
具体操作,详见下图,
(7)、split 命令
split 切割,-b 大小(默认单位字节),-l 行数
首先来创建一个大文件,输入命令 find /etc/ -type f -name "conf" ,回车,见下图,
该命令结果内容太多,不一一截图,接着操作如下,
后面这些 4.0 KB的文件也很多,不一一截图了。接着用命令 du -sh ,回车,见下图,
内容也非常多,不一一截图。1000 单位是 b 。因为前面切割的单位是 1000 ,接着往 100 切割,见下图,
切割成 100 之后,文件就更多了,图片内容截图不全,可以注意到这些小文件的命名都是有按字母排序的。文件太多,全部删除掉,接着往下操作,
以上就是 split 的用法,可以按大小切割,也可以按行数切割。
3、特殊符号
$ 、 ~ 、 & 、> 、>> 、2> 、2>> 、 &> 、 [ ] ,这些符号前面都有说过,这边就不介绍了。正则表达式,后面再介绍。
下面说一下 ; 分号,见下图,
这个命令 for i in 'seq 1 10' ,后面再介绍。注意上图中红色框框的内容,单引号和反引号作用的结果是不一样的。接着按向上的方向键,就出现上图中最后面的那个命令,也就是命令历史,会发现里面自动加上了分号 ; ,这就是多条命令之间用分号分割。继续操作,见下图,
两条命令之间用分号分割,分号前后可以空格也可以不用空格,结果都是一样的,建议还是用空格区分一下,看起来比较直观。
接着介绍一下 || 和 && 这两个符号,其中 || 用在 shell 当中就表示或者的意思,见下图,
上图中, la.txt 是没有的文件,所以会出现报错。用 ;号两个结果都能执行,换成 || 号,也两个结果都有出现。接着把 la.txt 文件换成正确的 1.txt 文件,就只出现了一个结果,是前面一条命令的结果。以上说明,|| 号是或者的意思,前一条命令执行不成功的话,就执行后面的一条命令。前面的命令执行成功的话,后面的命令就不执行了。
反过来,如果前面的命令执行成功了,才会执行后面的命令,就用 && 号,见下图,
现在举一个实际应用的例子,见下图,
关于命令 [ -d lyslinux ] || mkdir lyslinux 后面会介绍,现在先了解一下。[ -d lysliunx ] 这个命令的意思是用来判断 lyslinux 是不是一个目录,并且这个目录是否存在?是目录并且存在的话,这个命令就成功了。如果不存在的话就创建一个目录 lyslinux ,如上图红色框框显示的结果。而命令 [ -d lyslinux ] && mkdir lyslinux 的意思是,目录 lyslinux 存在的话,再去创建一个目录 lyslinux ,所以执行的结果就是无法创建目录 ”lyslinux“:文件已存在,执行的是后面的命令。接着执行命令 [ -d lyslinux ] || mkdir lyslinux ,就没有报错,意思是目录 lyslinux 存在就不执行后面的创建目录的命令。
关于 || 和 && 的用法,后面在 shell 脚本里会多次用到。