Linux學習-管理檔案(4)
阿新 • • 發佈:2020-11-16
使用命令列擴充套件
Bash shell有多種擴充套件命令列的方式,包括模式匹配、主目錄擴充套件、字串擴充套件和變數替換。
元字元和匹配項表
模式 | 匹配項 |
* | 由零個或更多字元組成的任意字串 |
? | 任何一個字元 |
[abc...] | 括起的類(位於兩個方括號之間)中的任何一個字元 |
[!abc...] | 不在括起的類中的任何一個字元 |
[^abc...] | 不在括起的類中的任何一個字元 |
[[:alpha:]] | 任何字母字元 |
[[:lower:]] | 任何小寫字元 |
[[:upper:]] | 任何大寫字元 |
[[:alnum:]] | 任何字母字元或數字 |
[[:punct:]] | 除空格和字母數字以外的任何可列印字元 |
[[:digit:]] | 從0到9的任何單個數字 |
[[:space:]] | 任何一個空白字元。 |
示例:
簡單模式匹配:
通過星號和問號字元以及一類字元來匹配其中一些檔名
[jumpserver@192 bin]$ ls a* abrt-action-analyze-backtrace abrt-dump-xorg ar abrt-action-analyze-c abrt-handle-upload arch abrt-action-analyze-ccpp-local abrt-merge-pstoreoops arecord [jumpserver@192 bin]$ ls *a* abrt-action-analyze-backtrace nl-cls-add abrt-action-analyze-c nl-link-enslave abrt-action-analyze-ccpp-local nl-link-ifindex2name abrt-action-analyze-core nl-link-name2ifindex jumpserver@192 bin]$ ls [ac]* abrt-action-analyze-backtrace analog catman clear abrt-action-analyze-c aplay cc clevis abrt-action-analyze-ccpp-local aplaymidi cd clevis-decrypt abrt-action-analyze-core appstream-compose cd-convert clevis-decrypt-sss [jumpserver@192 bin]$ ls ??? atq c99 col dig env ftp gjs jjs lua mdu ptx red scp sum tee top who zip [jumpserver@192 bin]$ ls ????? alias chacl crash fgrep guild lscpu mmcli nproc pchrt pslog sg_dd tload vlock xmlwf amidi chage dconf flock guile lsiio mmove nroff pgrep quota shred totem watch xzcat
波形符擴充套件:
波形符(~)可匹配當前使用者的主目錄
[jumpserver@192 /]$ ls ~jumpserver Desktop Documents Downloads Music Pictures Public Templates Videos
大括號擴充套件:
1)大括號擴充套件用於生成任意字串
2)大括號包含字串的逗號分隔列表或順序表示式
3)雙句點語法(..)可擴充套件成一個序列,使得{m..p}擴充套件成m n o p
[jumpserver@192 test]$ echo {Sunday,Monday,Tuesday,Wednesday}.log Sunday.log Monday.log Tuesday.log Wednesday.log [jumpserver@192 test]$ echo file{1..3}.txt file1.txt file2.txt file3.txt [jumpserver@192 test]$ echo file{a..e}.txt filea.txt fileb.txt filec.txt filed.txt filee.txt [jumpserver@192 test]$ echo file{a,b}{1,2}.txt filea1.txt filea2.txt fileb1.txt fileb2.txt [jumpserver@192 test]$ echo file{a{1,2},b,c}.txt filea1.txt filea2.txt fileb.txt filec.txt [jumpserver@192 test]$ mkdir rhel{6,7,8} [jumpserver@192 test]$ ls R* ls: cannot access 'R*': No such file or directory [jumpserver@192 test]$ ls r* rhel6: rhel7: rhel8:
變數擴充套件:
變數的作用類似於可以在記憶體中儲存值的命名容器
通過變數,可以從命令列或在shell指令碼內輕鬆訪問和修改儲存的資料
[jumpserver@192 test]$ USERNAME=operator [jumpserver@192 test]$ echo $USERNAME operator 為了避免因其他shell擴充套件而引起的錯誤,可將變數的名稱放在大括號中 [jumpserver@192 test]$ echo ${USERNAME} operator
命令替換:
1)命令替換允許命令的輸出替換命令列上的命令本身
2)當命令括在括號中並且前面有美元符號($)時,會發生命令替換
[jumpserver@192 test]$ echo Today is $(date) Today is Sun Nov 15 23:24:08 PST 2020
防止引數被擴充套件:
反斜槓(\)是Bash shell中的轉義字元。它可以防止緊隨其後的字元被擴充套件
[jumpserver@192 /]$ echo the value is $HOME is your home directory the value is /home/jumpserver is your home directory [jumpserver@192 /]$ echo the value is \$HOME is your home directory the value is $HOME is your home directory
如果需要保護較長的字串,則使用單引號('')或雙引號("")來括起字串
單引號:阻止通配和shell擴充套件
雙引號:阻止大部分shell擴充套件
使用雙引號可以阻止通配和shell擴充套件,但依然允許命令和變數替換 [jumpserver@192 /]$ echo "---------hostname is ${myhost}------------" ---------hostname is 192------------ [jumpserver@192 /]$ echo "will varialbe $myhost evaluate to $(hostname -s)" will varialbe 192 evaluate to 192 [jumpserver@192 /]$ echo 'will varialbe $myhost evaluate to $(hostname -s)' will varialbe $myhost evaluate to $(hostname -s)