shell中的特殊符號:正則表達式
一、* 表明任意n個字符,包括0個shell
二、? 表明任意單個字符bash
三、# 註釋字符,#號後面的字符不生效,僅註釋用ssh
[root@lgs-01 ~]# #ls [root@lgs-01 ~]# ls 2 abc anaconda-ks.cfg passwdtest rpmtest tartest
四、\ 脫義字符,要顯示特殊符號自己,能夠用脫義字符,例如: $post
[root@lgs-01 ~]# y=$6 [root@lgs-01 ~]# echo $y [root@lgs-01 ~]# y=\$6 [root@lgs-01 ~]# echo $y $6
五、| 管道字符。code
與管道字符有關的cut命令:分割截取字符串排序
-d 選項:指定分隔符,一般配合其餘選項 如 -f 一塊兒用字符串
-f 選項:指定段號 顯示每行的全部指定段:it
[root@lgs-01 ~]# cat passwdtest|head -2 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin [root@lgs-01 ~]# cat passwdtest|head -2|cut -f1 -d ":" root bin [root@lgs-01 ~]# cat passwdtest|head -2|cut -f2,5 -d ":" x:root x:bin [root@lgs-01 ~]# cat passwdtest|head -2|cut -f2-5 -d ":" x:0:0:root x:1:1:bin
-c選項:指定第幾個字符test
[root@lgs-01 ~]# cat passwdtest|head -2 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin [root@lgs-01 ~]# cat passwdtest|head -2|cut -c 4 t :
排序命令:sort ,按列排序,默認按字符的ACSII碼排序
[root@lgs-01 ~]# cat passwdtest root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:997:User for polkitd:/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin lgs:x:1008:1000::/home/lgs:/bin/bash abc:x:1001:1000::/home/abc:/bin/bash [root@lgs-01 ~]# sort passwdtest abc:x:1001:1000::/home/abc:/bin/bash adm:x:3:4:adm:/var/adm:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin halt:x:7:0:halt:/sbin:/sbin/halt lgs:x:1008:1000::/home/lgs:/bin/bash lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin polkitd:x:999:997:User for polkitd:/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin root:x:0:0:root:/root:/bin/bash shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
-n選項:以數字的值排序,數字之外的認爲是0
[root@lgs-01 ~]# sort -n passwdtest abc:x:1001:1000::/home/abc:/bin/bash adm:x:3:4:adm:/var/adm:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin halt:x:7:0:halt:/sbin:/sbin/halt lgs:x:1008:1000::/home/lgs:/bin/bash lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin polkitd:x:999:997:User for polkitd:/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin root:x:0:0:root:/root:/bin/bash shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin 1 2 9 12 51 59 587
-r選項:反向排序,從大到小
[root@lgs-01 ~]# sort -r passwdtest systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown root:x:0:0:root:/root:/bin/bash postfix:x:89:89::/var/spool/postfix:/sbin/nologin polkitd:x:999:997:User for polkitd:/:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin lgs:x:1008:1000::/home/lgs:/bin/bash halt:x:7:0:halt:/sbin:/sbin/halt games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin abc:x:1001:1000::/home/abc:/bin/bash 9 59 587 51 2 12 1
-t選項:分隔符 -kn1 (少用)
統計行數:wc -l 空行也算
[root@lgs-01 ~]# cat 1.txt abc 111 1123 22 3 3 3 [root@lgs-01 ~]# wc -l 1.txt 7 1.txt
統計字符數:wc -m ,每一行後面的隱藏換行符$也計算在內,空格也算
[root@lgs-01 ~]# cat -A 1.txt abc 111$ 1123$ 22 3$ $ 3$ $ 3$ [root@lgs-01 ~]# wc -m 1.txt 24 1.txt
統計詞數:wc -w ,以空格區分統計
[root@lgs-01 ~]# cat 1.txt abc 111 1123 22 3 3 3 [root@lgs-01 ~]# wc -w 1.txt 7 1.txt
去重複:uniq。 要連續行重複,纔會去重複。
只去重了重複的連續行aaaa
[root@lgs-01 ~]# cat 1.txt abc:111 1123 22 3 3 3 1123 aaaa aaaa bb 123 bb [root@lgs-01 ~]# uniq 1.txt abc:111 1123 22 3 3 3 1123 aaaa bb 123 bb
或者先排序後去重複纔有效,重複空行也能去重。
[root@lgs-01 ~]# cat 1.txt abc:111 1123 22 3 3 3 1123 aaaa aaaa bb 123 bb [root@lgs-01 ~]# sort 1.txt |uniq 1123 123 22 3 3 aaaa abc:111 bb
-c選項:統計重複的次數
[root@lgs-01 ~]# cat 1.txt abc:111 1123 22 3 3 3 1123 aaaa aaaa bb 123 bb [root@lgs-01 ~]# sort 1.txt |uniq -c 4 2 1123 1 123 1 22 3 2 3 2 aaaa 1 abc:111 2 bb
tee命令:重定向並顯示,手動輸入重定向內容
[root@lgs-01 ~]# cat 2.txt [root@lgs-01 ~]# tee 2.txt 111 111 abc abc ^C [root@lgs-01 ~]# cat 2.txt 111 abc
tee -a 選項:追加並顯示,手動輸入追加內容
[root@lgs-01 ~]# cat 2.txt 111 abc [root@lgs-01 ~]# tee -a 2.txt lgs lgs xyz xyz ^C [root@lgs-01 ~]# cat 2.txt 111 abc lgs xyz
用管道符,能夠自動輸入tee的追加內容:
[root@lgs-01 ~]# cat 1.txt abc:111 1123 22 3 3 3 1123 aaaa aaaa bb 123 bb [root@lgs-01 ~]# sort 1.txt |uniq -c|tee 3.txt 4 2 1123 1 123 1 22 3 2 3 2 aaaa 1 abc:111 2 bb [root@lgs-01 ~]# cat 3.txt 4 2 1123 1 123 1 22 3 2 3 2 aaaa 1 abc:111 2 bb
tr命令:替換字符,[]內重複字符的,最後一位匹配的才生效替換。
[root@lgs-01 ~]# cat 2.txt 111 abc lgs xyz [root@lgs-01 ~]# cat 2.txt |tr '[111]' '[999]' 999 abc lgs xyz [root@lgs-01 ~]# cat 2.txt 111 abc lgs xyz 126 [root@lgs-01 ~]# cat 2.txt |tr '[111]' '[456]' 666 abc lgs xyz 626
小寫字母替換爲大寫字母:
[root@lgs-01 ~]# cat 2.txt 111 abc lgs xyz 126 [root@lgs-01 ~]# cat 2.txt |tr '[a-z]' '[A-Z]' 111 ABC LGS XYZ 126
split命令:切割,大文件切成小文件 ,切成指定大小的幾份
[root@lgs-01 ~]# du -sh abc 3.0M abc [root@lgs-01 ~]# split -b 1M abc [root@lgs-01 ~]# ls 1.txt 2 2.txt 345 abc anaconda-ks.cfg passwdtest rpmtest tartest xaa xab xac [root@lgs-01 ~]# du -sh xaa 1.0M xaa [root@lgs-01 ~]# du -sh xab 1.0M xab [root@lgs-01 ~]# du -sh xac 956K xac
-l 選項:指定行切割。
[root@lgs-01 6]# wc -l passwdtest 31 passwdtest [root@lgs-01 6]# split -l 10 passwdtest [root@lgs-01 6]# ls passwdtest xaa xab xac xad [root@lgs-01 6]# wc -l xaa 10 xaa [root@lgs-01 6]# wc -l xad 1 xad [root@lgs-01 6]# cat xaa root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin [root@lgs-01 6]# cat xad abc:y
指定分割後的文件名前綴:
[root@lgs-01 6]# split [root@lgs-01 6]# ls abc passwdtest [root@lgs-01 6]# split -b 100K abc kkk. [root@lgs-01 6]# ls abc kkk.ab kkk.ad kkk.af kkk.ah kkk.aj kkk.al kkk.an kkk.ap kkk.ar kkk.at kkk.av kkk.ax kkk.az kkk.bb kkk.bd passwdtest kkk.aa kkk.ac kkk.ae kkk.ag kkk.ai kkk.ak kkk.am kkk.ao kkk.aq kkk.as kkk.au kkk.aw kkk.ay kkk.ba kkk.bc kkk.be
$ : 變量的前綴,例如 $PATH、$HOME等;$在則正表達式裏表示行尾的意思
[root@lgs-01 ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin [root@lgs-01 ~]# echo $x 10
與! 結合使用:!$ 表明上一條命令的最後一個參數
[root@lgs-01 ~]# echo $x 10 [root@lgs-01 ~]# echo !$ echo $x 10
多條命令寫在一行,用 ; 號隔開
[root@lgs-01 ~]# ls ; ls -l abc 1.txt 2 2.txt 345 3.txt 6 abc anaconda-ks.cfg passwdtest rpmtest tartest xaa xab xac -rwxr-xr-x. 1 root root 3073568 4月 16 18:00 abc
~ 表示用戶的家目錄:正則表達式裏表明 匹配符
[root@lgs-01 ~]# ls -d ~ /root
& 號放在命令後面,表明把命令放到後臺運行
[root@lgs-01 ~]# sleep 100 & [1] 1586 [root@lgs-01 ~]# jobs [1]+ 運行中 sleep 100 &
[ ] 中括號 指定裏面字符中的某單個字符:[0-9]、[a-zA-Z]、[abcdefg]
|| 、&& 用於命令之間:在shell中 || 表明或者、&&表明而且
命令a || 命令b 表明 0 : 1或者 1 : 0,意思是命令a執行不成功,才執行命令b;若是命令a執行成功,就不執行命令b。
命令a && 命令b 表明 1 : 1 或者 0 : 0,意思是命令a執行成功,才執行命令b;若是命令a執行不成功,就不執行命令b。
shell腳本中的小案例:[-d abc] || mkdir abc,判斷abc是不是目錄,若是不是,建立abc目錄。