2017 11 17 shell指令碼 (三)

2021-08-10 22:59:22 字數 4231 閱讀 1048

linux shell中的特殊符號

* 代表零個或多個任意字元。

[root@node69 test]# ls *.txt

1.txt 2.txt

? 匹配符號,1個任意的字元

# 注視說明用的,使後面的內容失去原本的意義

\ 脫義字元,將特殊字元還原為普通字元

|  管道符  將符號前面命令的結果丟給符號後面的命令,

命令 : cut

用來擷取某乙個字段

語法: cut

-d'分隔字元'

[-cf]

n 這裡的n是數字

-d :後面跟分隔字元,分隔字元要用雙引號括起來

-c :後面接的是第幾個字元

-f :後面接的是第幾個區塊

[root@node69 ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1

root

bin[root@node69 ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1,2

root:x

bin:x

[root@node69 ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1-3

root:x:0

bin:x:1

-d 後面跟分隔字元,這裡使用冒號作為分割字元,-f 1 就是擷取第一段

-c 後面可以是1個數字n,也可以是乙個區間n1-n2

2)sort

語法: sort [-t 分隔符] [-kn1,n2] [-nru]  (n1

不加選項,從首字元向後,依次按ascii碼值進行公升序排序

-t 後指定分隔符,-kn1,n2表示在指定的區間中排序,-k後面只跟乙個數字表示對第n個字元排序,-n表示使用純數字排序 

-r 表示以降序的形式排序 

-u 去重  

[root@node69 ~]# sort 2.txt |uniq

1123

2abc

abc 1111,222

3)wc

用於統計文件的行數、字元數、詞數

不加任何選項,會顯示行數、詞數以及字元數

-l 統計行數

-m 統計字元數

-w 統計詞數

[root@node69 ~]# wc -l /etc/passwd

43 /etc/passwd

[root@node69 ~]# wc -m /etc/passwd

2242 /etc/passwd

[root@node69 ~]# wc -w /etc/passwd

86 /etc/passwd

4)uniq

uniq 去重複,最常用就乙個 -c 用來統計重複的行數,去重前要先排序

[root@node69 ~]# sort 2.txt |uniq

1123

2abc

abc 1111,222

[root@node69 ~]# sort 2.txt |uniq -c

2 12 123

1 21 abc

1 abc 1111,222

5)命令 : tee

後跟檔名,類似與重定向 「>」, 但是比重定向多了乙個功能,在把檔案寫入後面所跟的檔案中的同時,還顯示在螢幕上。

[root@node69 ~]# sort 2.txt |uniq -c |tee a.txt

2 12 123

1 21 abc

1 abc 1111,222

[root@node69 ~]# sort 2.txt |uniq -c |tee  -a a.txt

2 12 123

1 21 abc

1 abc 1111,222

[root@node69 ~]# cat a.txt

2 12 123

1 21 abc

1 abc 1111,222

2 12 123

1 21 abc

1 abc 1111,222

##### -a 選項,類似於追加

6)tr 用來替換字元 

最常用的就是大小寫轉換

[root@node69 ~]# echo "wagskun" |tr 'a' 'a'

wagskun

[root@node69 ~]# echo "wagskun" |tr '[a-z]' '[a-z]'

wagskun

[root@node69 ~]# echo "wagskun" |tr '[a-z]' '1'

1111111

7)split 切割大檔案用的

-b : 按大小來分割單位為byte  

[root@node69 ~]# find /etc/ -type f -name "*conf" -exec cat {} >> a.txt \;

[root@node69 ~]# du -sh a.txt

1.0m a.txt

[root@node69 ~]# mv a.txt test/

[root@node69 ~]# cd test

[root@node69 test]# split -b 1000 a.txt

[root@node69 test]# ls

1.txt xbk xcx xek xfx xhk xix xkk xlx xnk xox xqk xrx xtk xux xwk ***

2.txt xbl xcy xel xfy xhl xiy xkl xly xnl xoy xql xry xtl xuy xwl xxy

a.txt xbm xcz xem xfz xhm xiz xkm xlz xnm xoz xqm xrz xtm xuz xwm xxz

xaa xbn xda xen xga xhn xja xkn xma xnn xpa xqn xsa xtn xva xwn xya

xab xbo xdb xeo xgb xho xjb xko xmb xno xpb xqo xsb xto xvb xwo xyb

xac xbp xdc xep xgc xhp xjc xkp xmc xnp xpc xqp xsc xtp xvc xwp xyc

xad xbq xdd xeq xgd xhq xjd xkq xmd xnq xpd xqq xsd xtq xvd xwq xyd

xae xbr xde xer xge xhr xje xkr xme xnr xpe xqr xse xtr xve xwr xye

xaf xbs xdf xes xgf xhs xjf xks xmf xns xpf xqs xsf xts xvf xws xyf

-l : 按行數分隔

[root@node69 test]# split -l 1000 a.txt

[root@node69 test]# ls -l

總用量 3836

-rw-r--r-- 1 root root 7 11月 17 00:02 1.txt

-rw-r--r-- 1 root root 14 11月 17 00:02 2.txt

-rw-r--r-- 1 root root 647650 11月 18 10:25 a.txt

特殊符號

$變數字首,!$組合,正則裡面表示行尾

;多條命令寫到一行,用分號分割

~使用者家目錄,

後面正規表示式表示匹配符

&放到命令後面,會把命令丟到後台

>   >>   2>  2>> &>

指定字元中的乙個,[0-9],[a-za-z],[abc]

||和&& ,用於命令之間

Shell指令碼(三) Shell指令碼入門

1 指令碼格式 指令碼以 bin bash開頭 指定解析器 2 第乙個shell指令碼 helloworld 1 需求 建立乙個shell指令碼,輸出helloworld 2 案例實操 atguigu hadoop101 datas touch helloworld.sh atguigu hadoo...

Shell指令碼和shell

1.shell script,shell指令碼與windows dos下的批處理相似,也就是用各類命令預先放入到乙個檔案中,方便一次性執行的乙個程式檔案,主要是方便管理員進行設定或者管理用的。但是它比windows下的批處理更強大,比用其他程式設計程式編輯的程式效率更高,畢竟它使用了linux un...

shell 執行shell指令碼

bin bash echo hello world 是乙個約定的標記,它告訴系統這個指令碼需要什麼直譯器來執行,即使用哪一種 shell。echo 命令用於向視窗輸出文字。1 作為可執行程式 chmod x test.sh 使指令碼具有執行許可權 test.sh 執行指令碼注意,一定要寫成 test...