1. 命令執(zhí)行順序控制
-
&&
表示如果前面的命令執(zhí)行結(jié)果(不是表示終端輸出的內(nèi)容,而是表示命令執(zhí)行狀態(tài)的結(jié)果)返回0則執(zhí)行后面的版仔,否則不執(zhí)行:
shiyanlou:~/ $ which cowsay>/dev/null && echo "Haha" [12:25:56]
Haha
shiyanlou:~/ $ echo $? [12:26:08]
0
環(huán)境變量$?
獲取上一次命令的返回結(jié)果。cowsay
已安裝,返回0
敞曹,執(zhí)行echo "Haha"
胜卤。
<p>
-
||
表示如果前面的命令執(zhí)行結(jié)果不為0則執(zhí)行后面的命令:
shiyanlou:~/ $ which cowsay>/dev/null || echo "hah" [12:26:30]
shiyanlou:~/ $ echo $? [12:33:29]
0
||
前面的返回0
疆导,則不執(zhí)行后面的命令,不輸出結(jié)果瑰艘。
<p>
-
&&
與||
結(jié)合使用
shiyanlou:~/ $ which cowsay>/dev/null && echo "exist" || echo "not exist"
exist
shiyanlou:~/ $ which cowsay>/dev/null || echo "not exist" && echo "exist"
exist
由結(jié)果可見(jiàn)是鬼,&&
和 ||
可以任意順序,不影響結(jié)果紫新。下圖是上述第一行代碼的流程圖:
<p>
<p>
2. 管道
管道表現(xiàn)出來(lái)的形式就是將前面每一個(gè)進(jìn)程的輸出(stdout)直接作為下一個(gè)進(jìn)程的輸入(stdin)均蜜。分為具名管道和匿名管道。具名管道簡(jiǎn)單的說(shuō)就是有名字的管道芒率,通常只會(huì)在源程序中用到具名管道囤耳。匿名管道則在命令行中由 |
分隔符表示。
-
|
之前進(jìn)程的輸出是之后進(jìn)程的輸入
$ ls -al /etc | less
通過(guò)管道將前一個(gè)命令ls
的輸出作為下一個(gè)命令less
的輸入。一行一行地查看ls
命令輸出的結(jié)果充择,即/etc
目錄下的文件和目錄德玫。
<p>
-
cut
打印每一行的某個(gè)字段
shiyanlou:~/ $ cat /etc/passwd [12:49:36]
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
# 以上為部分結(jié)果
先用cat
查看/etc/passwd
,發(fā)現(xiàn)其中每一行記錄都是以:
來(lái)分隔字段的椎麦。所以想查看按:
分割之后的第一個(gè)字段和第六個(gè)字段宰僧,可以如下使用cut
命令:
shiyanlou:~/ $ cut /etc/passwd -d ':' -f 1,6 [12:56:27]
root:/root
daemon:/usr/sbin
bin:/bin
# 以上為部分結(jié)果
也可以用-c
參數(shù)來(lái)打印每一行的第N個(gè)字符:
# 前五個(gè)(包含第五個(gè))
shiyanlou:~/ $ cut /etc/passwd -c -5 [13:00:55]
root:
daemo
bin:x
# 前五個(gè)之后的(包含第五個(gè))
shiyanlou:~/ $ cut /etc/passwd -c 5- [13:03:49]
:x:0:0:root:/root:/bin/bash
on:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
x:2:2:bin:/bin:/usr/sbin/nologin
# 第五個(gè)
shiyanlou:~/ $ cut /etc/passwd -c 5 [13:04:49]
:
o
x
# 2到5之間的(包含第5個(gè))
shiyanlou:~/ $ cut /etc/passwd -c 2-5 [13:06:03]
oot:
aemo
in:x
<p>
-
grep
命令,在文本中或stdin
中查找匹配字符串
一般形式:grep [命令選項(xiàng)]... 用于匹配的表達(dá)式 [文件]...
如下观挎,搜索/home/shiyanlou
目錄下所有包含"shiyanlou"
的所有文本文件琴儿,并顯示出現(xiàn)在文本中的行號(hào):
shiyanlou:~/ $ grep -rnI "shiyanlou" ~ [13:06:31]
/home/shiyanlou/.zshrc:2: export ZSH=/home/shiyanlou/.oh-my-zsh
/home/shiyanlou/Code/shiyanlou_cs1/README.md:1:shiyanlou_cs1
其中,-r
參數(shù)表示遞歸搜索子目錄中的文件,-n
表示打印匹配項(xiàng)行號(hào)嘁捷,-I
表示忽略二進(jìn)制文件造成。
<p>
-
wc
命令,簡(jiǎn)單小巧的計(jì)數(shù)工具
wc
命令用于統(tǒng)計(jì)并輸出一個(gè)文件中行雄嚣、單詞和字節(jié)的數(shù)目晒屎。應(yīng)用如下:
# 概覽
shiyanlou:~/ $ wc /etc/passwd [13:15:03]
28 35 1370 /etc/passwd
# 行數(shù)
shiyanlou:~/ $ wc /etc/passwd -l [13:21:08]
28 /etc/passwd
# 單詞數(shù)
shiyanlou:~/ $ wc /etc/passwd -w [13:21:26]
35 /etc/passwd
# 字節(jié)數(shù)
shiyanlou:~/ $ wc /etc/passwd -c [13:21:40]
1370 /etc/passwd
# 字符數(shù)
shiyanlou:~/ $ wc /etc/passwd -m [13:21:53]
1370 /etc/passwd
# 最長(zhǎng)行字節(jié)數(shù)
shiyanlou:~/ $ wc /etc/passwd -L [13:22:59]
81 /etc/passwd
** 運(yùn)用管道和 wc
統(tǒng)計(jì) /etc
下面所有目錄數(shù):*
shiyanlou:~/ $ ls -dl /etc/*/ | wc -l [13:27:15]
103
<p>
-
sort
排序命令
通常在查看命令后面結(jié)合管道使用,如:
# 默認(rèn)排序
$ cat /etc/passswd | sort
# 逆序
$ cat /etc/passswd | sort
還可以按照特定字段排序:
$ cat /etc/passwd | sort -t':' -k 3 -n
上面的-t
參數(shù)用于指定字段的分隔符缓升,這里是以":"
作為分隔符鼓鲁;-k
字段號(hào)
用于指定對(duì)哪一個(gè)字段進(jìn)行排序。
<p>
-
uniq
去重命令
需要注意的是仔沿,uniq
命令只能去連續(xù)重復(fù)的行坐桩,不是全文去重,所以要達(dá)到預(yù)期效果封锉,可以在去重之前先排序绵跷。
shiyanlou:~/ $ history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq
** 其中 history
指之前執(zhí)行過(guò)的語(yǔ)句*