Bash Shell的操作環(huán)境詳解
是否記得我們登入主機(jī)的時(shí)候,屏幕上頭會(huì)有一些說(shuō)明文字,告知我們的 Linux 版本啊什么的, 還有,登入的時(shí)候我們還可以給予用戶(hù)一些訊息或者歡迎文字呢。此外, 我們習(xí)慣的環(huán)境變量、命令別名等等的,是否可以登入就主動(dòng)的幫我設(shè)定好? 這些都是需要注意的。另外,這些設(shè)定值又可以分為系統(tǒng)整體設(shè)定值與各人喜好設(shè)定值, 僅是一些文件放置的地點(diǎn)不同啦!這我們后面也會(huì)來(lái)談一談的!
1、路徑與指令搜尋順序
現(xiàn)在我們知道系統(tǒng)里面其實(shí)有不少的 ls 指令,或者是包括內(nèi)建的 echo 指令, 那么來(lái)想一想,如果一個(gè)指令 (例如 ls) 被下達(dá)時(shí), 到底是哪一個(gè) ls 被拿來(lái)運(yùn)作?很有趣吧!基本 上,指令運(yùn)作的順序可以這樣看:
- 以相對(duì)/絕對(duì)路徑執(zhí)行指令,例如『 /bin/ls 』或『 ./ls 』;
- 由 alias 找到該指令來(lái)執(zhí)行;
- 由 bash 內(nèi)建的 (builtin) 指令來(lái)執(zhí)行;
- 透過(guò) $PATH 這個(gè)變量的順序搜尋到的第一個(gè)指令來(lái)執(zhí)行。
舉例來(lái)說(shuō),你可以下達(dá) /bin/ls 及單純的 ls 看看,會(huì)發(fā)現(xiàn)使用 ls 有顏色但是 /bin/ls 則沒(méi)有顏色。因?yàn)?/bin/ls 是直接取用該指令來(lái)下達(dá),而 ls 會(huì)因?yàn)椤?alias ls='ls --color=auto' 』這個(gè)命令別名而先使用!
如果想要了解指令搜尋的順序,其實(shí)透過(guò) type -a ls 也可以查詢(xún)的到啦!上述的順序最好先了解喔!
[dmtsai@study ~]$ alias echo='echo -n' [dmtsai@study ~]$ type -a echo echo is aliased to `echo -n' echo is a shell builtin echo is /usr/bin/echo
注意:指令通常指的是二進(jìn)制的可執(zhí)行文件,系統(tǒng)在安裝時(shí)就已經(jīng)編譯好的文件;shell腳本是一種文本文件,依賴(lài)shell解釋器來(lái)執(zhí)行。
2、bash的進(jìn)站(開(kāi)機(jī))與歡迎信息:/etc/issue,/etc/motd
(1)/etc/issue
issue有冒出之意--可理解為開(kāi)機(jī)冒出來(lái)的訊息
bash 也有進(jìn)站畫(huà)面與歡迎訊息喔?真假?真的?。?還記得在終端機(jī)接口 (tty1 ~ tty6) 登入 的時(shí)候,會(huì)有幾行提示的字符串嗎?那就是進(jìn)站畫(huà)面??!那個(gè)字符串寫(xiě)在哪里啊?呵呵!在 /etc/issue 里面啊!
先來(lái)看看:
[root@localhost ~]# cat /etc/issue \S Kernel \r on an \m
就如同 $PS1 這變量一樣,issue 這個(gè)文件的內(nèi)容也是可以使用反斜杠作為變量取用喔!你可以 man issue 配合 man agetty 得到底下的結(jié)果:

vi /etc/issue \S (terminal: \l) Date: \d \t Kernel \r on an \m Welcome!

要注意的是,除了 /etc/issue 之外還有個(gè) /etc/issue.net 呢!這是啥?這個(gè)是提供給 telnet 這個(gè)遠(yuǎn) 程登錄程序用的。
當(dāng)我們使用 telnet 連接到主機(jī)時(shí),主機(jī)的登入畫(huà)面就會(huì)顯示 /etc/issue.net 而不是 /etc/issue 呢!
(2)/etc/motd
多嘴幾句:motd是message of the day的縮寫(xiě)
etc是et cetera即等等的意思。“et” 在拉丁語(yǔ)中是 “和、與” 的意思,“cetera” 是 “其余的、其他的” 意思,合起來(lái)就是 “和其他的”。
至于如果您想要讓使用者登入后取得一些訊息,例如您想要讓大家都知道的訊息, 那么可以將訊息 加入 /etc/motd 里面去!例如:當(dāng)?shù)侨牒?,告訴登入者, 系統(tǒng)將會(huì)在某個(gè)固定時(shí)間進(jìn)行維護(hù)工作, 可以這樣做 (一定要用 root 的身份才能修改喔!):
[root@study ~]# vim /etc/motd Hello everyone, Our server will be maintained at 2015/07/10 0:00 ~ 24:00. Please don't login server at that time. ^_^ 那么當(dāng)你的使用者(包括所有的一般賬號(hào)與 root)登入主機(jī)后,就會(huì)顯示這樣的訊息出來(lái): Last login: Wed Jul 8 23:22:25 2015 from 127.0.0.1 Hello everyone, Our server will be maintained at 2015/07/10 0:00 ~ 24:00. Please don't login server at that time. ^_^ ###我的阿里云的例子 [root@ptivitic ~]# vi /etc/motd Welcome to Alibaba Cloud Elastic Compute Service ! Welcome to Langxi's ptivitic home
3、bash的環(huán)境配置文件
我們什么動(dòng)作都沒(méi)有進(jìn)行,但是一進(jìn)入 bash 就取得一堆有用的變量了,這是因?yàn)?strong>系統(tǒng)有一些環(huán)境配置文件的存在,讓 bash 在啟動(dòng)時(shí)直接讀取這些配置文件,以規(guī)劃好 bash的操作環(huán)境!
而這些配置文件又可以分為全體系統(tǒng)的配置文件以及用戶(hù)個(gè)人偏好配置文件。要注意的是, 前面談到的命令別名啦、自定義的變量,在你注銷(xiāo) bash 后就會(huì)失效,所以你想要保留你的設(shè)定, 就得要將這些設(shè)定寫(xiě)入配置文件才行。
(1)login與non-login shell
在介紹bash的配置文件前,先知道login與non-login,重點(diǎn)在于有沒(méi)有登入(login)- 用戶(hù)密碼
- login shell:取得 bash 時(shí)需要完整的登入流程的,就稱(chēng)為 login shell。舉例來(lái)說(shuō),你要由 tty1 ~ tty6 登入, 需要輸入用戶(hù)的賬號(hào)與密碼,此時(shí)取得的 bash 就稱(chēng)為『 login shell 』啰;
- non-login shell:取得 bash 接口的方法不需要重復(fù)登入的舉動(dòng),舉例來(lái)說(shuō),你在原本的 bash 環(huán)境下再次下達(dá) bash 這個(gè)指令,同樣的也沒(méi)有輸入賬號(hào)密碼, 那第二個(gè) bash (子程序) 也是 non-login shell 。
- login Shell:它會(huì)讀取一系列的系統(tǒng)配置文件,比如
/etc/profile和用戶(hù)主目錄下的~/.bash_profile等文件來(lái)初始化環(huán)境。 - /etc/profile:這是系統(tǒng)整體的設(shè)定,你最好不要修改這個(gè)文件;
- ~/.bash_profile 或 ~/.bash_login 或 ~/.profile:屬于使用者個(gè)人設(shè)定,你要改自己的數(shù)據(jù),就寫(xiě)入這里!
- non - login Shell:它不會(huì)像登錄 shell 那樣讀取所有的登錄相關(guān)配置文件,而是只讀取一些部分配置文件,如
~/.bashrc。
(2)/etc/profile(login shell才會(huì)讀取)
這個(gè)配置文件可以利用使用者的標(biāo)識(shí)符 (UID) 來(lái)決定很多重要的變量數(shù)據(jù), 這也是每個(gè)使用者登入取得 bash 時(shí)一定會(huì)讀取的配置文件! 所以如果你想要幫所有使用者設(shè)定整體環(huán)境,那就是改這里啰!
這個(gè)文件設(shè)定的變量主要有:
- PATH:會(huì)依據(jù) UID 決定 PATH 變量要不要含有 sbin 的系統(tǒng)指令目錄;
- MAIL:依據(jù)賬號(hào)設(shè)定好使用者的 mailbox 到 /var/spool/mail/賬號(hào)名;
- USER:根據(jù)用戶(hù)的賬號(hào)設(shè)定此一變量?jī)?nèi)容;
- HOSTNAME:依據(jù)主機(jī)的 hostname 指令決定此一變量?jī)?nèi)容;
- HISTSIZE:歷史命令記錄筆數(shù)。CentOS 7.x 設(shè)定為 1000 ;
- umask:包括 root 默認(rèn)為 022 而一般用戶(hù)為 002 等!
/etc/profile 可不止會(huì)做這些事而已,他還會(huì)去呼叫外部的設(shè)定數(shù)據(jù)喔!在 CentOS 7.x 默認(rèn)的情況下,底下這些數(shù)據(jù)會(huì)依序的被呼叫進(jìn)來(lái):
- /etc/profile.d/*.sh:只要在 /etc/profile.d/ 這個(gè)目錄內(nèi)且擴(kuò)展名為 .sh ,另外,使用者能夠具有 r 的權(quán)限, 那么該文件就會(huì)被 /etc/profile 呼叫進(jìn)來(lái)。在 CentOS 7.x 中,這個(gè)目錄底下的文件規(guī)范了 bash 操作接口的顏色、 語(yǔ)系、ll 與 ls 指令的命令別名、vi 的命令別名、which 的命令別名等等。如果你需要幫所有使用者設(shè)定一些共享的命令別名時(shí), 可以在這個(gè)目錄底下自行建立擴(kuò)展名為 .sh 的文件,并將所需要的數(shù)據(jù)寫(xiě)入即可喔!
- /etc/locale.conf:這個(gè)文件是由 /etc/profile.d/lang.sh 呼叫進(jìn)來(lái)的!這也是我們決定 bash 預(yù)設(shè)使用何種語(yǔ)系的重要配置文件! 文件里最重要的就是 LANG/LC_ALL 這些個(gè)變量的設(shè)定。
- /usr/share/bash-completion/completions/*: [tab] 的妙用吧。除了命令補(bǔ)齊、檔名補(bǔ)齊之外,還可以進(jìn)行指令的選項(xiàng)/參數(shù)補(bǔ)齊功能!那就是從這個(gè)目錄里面找到相對(duì)應(yīng)的指令來(lái)處理的! 其實(shí)這個(gè)目錄底下的內(nèi)容是由/etc/profile.d/bash_completion.sh 這個(gè)文件載入的。
bash 的 login shell 情況下所讀取的整體環(huán)境配置文件其實(shí)只有 /etc/profile,但是 /etc/profile 還會(huì)呼叫出其他的配置文件。
(3) ~./bash_profile(login shell才會(huì)讀取)
bash 在讀完了整體環(huán)境設(shè)定的 /etc/profile 并藉此呼叫其他配置文件后,接下來(lái)則是會(huì)讀取使用者的個(gè)人配置文件。
在 login shell 的 bash 環(huán)境中,所讀取的個(gè)人偏好配置文件其實(shí)主要有三個(gè),依序分別是:
- 1. ~/.bash_profile
- 2. ~/.bash_login
- 3. ~/.profile
其實(shí) bash 的 login shell 設(shè)定只會(huì)讀取上面三個(gè)文件的其中一個(gè), 而讀取的順序則是依照上面的順 序。
也就是說(shuō),如果 ~/.bash_profile 存在,那么其他兩個(gè)文件不論有無(wú)存在,都不會(huì)被讀取。
[root@ptivitic ~]# cat .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc ###這里是判斷是否存在,如果存在就進(jìn)行讀取 fi ### bash 配置文件的讀入方式比較有趣,主要是透過(guò)一個(gè)指令『 source 』來(lái)讀取的! ### 也就是說(shuō) ~/.bash_profile 其實(shí)會(huì)再呼叫 ~/.bashrc 的設(shè)定內(nèi)容 # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH
這個(gè)文件內(nèi)有設(shè)定 PATH 這個(gè)變量。由于PATH 在 /etc/profile 當(dāng)中已經(jīng)設(shè)定過(guò),所以在這里就以累加的方式增加用戶(hù)家目錄下的 ~/bin/ 為額外的執(zhí)行文件放置目錄。
這也就是說(shuō),你可以將自己建立的執(zhí)行檔放置到你自己家目錄下的 ~/bin/ 目錄啦! 那就可以直接執(zhí)行該執(zhí)行檔而不需要使用絕對(duì)/相對(duì)路徑來(lái)執(zhí)行該文件。
整個(gè) login shell 的讀取流程:

實(shí)線(xiàn)的的方向是主線(xiàn)流程,虛線(xiàn)的方向則是被呼叫的配置文件!從上面我們也可以清楚的知道,在 CentOS 的 login shell 環(huán)境下,最終被讀取的配置文件是『 ~/.bashrc 』這個(gè)文件喔!所以,你當(dāng)然可以將自己的偏好設(shè)定寫(xiě)入該文件即可。 底下我們還要討論一下 source 與 ~/.bashrc 喔!
(4)source:讀入環(huán)境配置文件的指令
利用 source 或小數(shù)點(diǎn) (.) 都可以將配置文件的內(nèi)容讀進(jìn)來(lái)目前的 shell 環(huán)境中!
舉例來(lái)說(shuō),我修改 了 ~/.bashrc ,那么不需要注銷(xiāo),立即以 source ~/.bashrc 就可以將剛剛最新設(shè)定的內(nèi)容讀進(jìn)來(lái)目前的環(huán)境中。
[dmtsai@study ~]$ source 配置文件檔名 范例:將家目錄的 ~/.bashrc 的設(shè)定讀入目前的 bash 環(huán)境中 [dmtsai@study ~]$ source ~/.bashrc <==底下這兩個(gè)指令是一樣的! [dmtsai@study ~]$ . ~/.bashrc
(5)~/.bashrc(non-login shell 會(huì)讀?。?/h3>
當(dāng)你取得 non-login shell 時(shí),該 bash 配置文件僅會(huì)讀取 ~/.bashrc 而已啦!那么預(yù)設(shè)的 ~/.bashrc 內(nèi)容是如何?--rc=run - commands
[root@ptivitic ~]# cat ~/.bashrc # .bashrc # User specific aliases and functions alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi alias php81='php81 -c /www/server/php/81/etc/php-cli.ini'
在 root 的 ~/.bashrc 中其實(shí)已經(jīng)規(guī)范了較為保險(xiǎn)的命令別名了。 此外,咱們的 CentOS 7.x 還會(huì)主動(dòng)的呼叫 /etc/bashrc 這個(gè)文件喔!為什么需要呼叫 /etc/bashrc 呢? 因?yàn)?/etc/bashrc 幫我們的 bash 定義出底下的數(shù)據(jù):
- 依據(jù)不同的 UID 規(guī)范出 umask 的值;
- 依據(jù)不同的 UID 規(guī)范出提示字符 (就是 PS1 變量);
- 呼叫 /etc/profile.d/*.sh 的設(shè)定
要注意的是,這個(gè) /etc/bashrc 是 CentOS 特有的 (其實(shí)是 Red Hat 系統(tǒng)特有的),其他不同的 distributions 可能會(huì)放置在不同的檔名就是了。
由于這個(gè) ~/.bashrc 會(huì)呼叫 /etc/bashrc 及 /etc/profile.d/*.sh , 所以,萬(wàn)一你沒(méi)有 ~/.bashrc (可能自己不小心將他刪除了),那么你會(huì)發(fā)現(xiàn)你的bash 提示字符可能會(huì)變成這個(gè)樣子:
-bash-4.2$
不要太擔(dān)心啦!這是正常的,因?yàn)槟?strong>并沒(méi)有呼叫 /etc/bashrc 來(lái)規(guī)范 PS1 變量啦!而且這樣的情況也不會(huì)影響你的 bash 使用。
如果你想要將命令提示字符捉回來(lái),那么可以復(fù)制 /etc/skel/.bashrc 到你的家目錄,再修訂一下你所想要的內(nèi)容, 并使用 source 去呼叫 ~/.bashrc ,那你的命令提示字符就會(huì)回來(lái)啦!
(6)bash的其他相關(guān)配置文件
- /etc/man_db.conf:這文件的內(nèi)容『規(guī)范了使用 man 的時(shí)候, man page 的路徑到哪里去尋找!』所以說(shuō)的簡(jiǎn)單一點(diǎn),這個(gè)文件規(guī)定了下達(dá) man 的時(shí)候,該去哪里查看數(shù)據(jù)的路徑設(shè)定!
- ~/.bash_history:預(yù)設(shè)的情況下,我們的歷史命令就記錄在這里!而這個(gè)文件能夠記錄幾筆數(shù)據(jù),則與 HISTFILESIZE 這個(gè)變量有關(guān)啊。每次登入 bash 后,bash 會(huì)先讀取這個(gè)文件,將所有的歷史指令讀入內(nèi)存, 因此,當(dāng)我們登入 bash 后就可以查知上次使用過(guò)哪些指令啰。
- ~/.bash_logout:這個(gè)文件則記錄了『當(dāng)我注銷(xiāo) bash 后,系統(tǒng)再幫我做完什么動(dòng)作后才離開(kāi)』的意思。 你可以去讀取一下這個(gè)文件的內(nèi)容,預(yù)設(shè)的情況下,注銷(xiāo)時(shí), bash 只是幫我們清掉屏幕的訊息而已。 不過(guò),你也可以將一些備份或者是其他你認(rèn)為重要的工作寫(xiě)在這個(gè)文件中 (例如清空暫存盤(pán)), 那么當(dāng)你離開(kāi) Linux 的時(shí)候,就可以解決一些煩人的事情啰!
4、終端機(jī)的環(huán)境設(shè)定:stty、set
舉例來(lái)說(shuō),我們可以利用退格鍵(backspace,就是那個(gè)←符號(hào)的按鍵) 來(lái)刪除命令行上的字符, 也可以使用 [ctrl]+c 來(lái)強(qiáng)制終止一個(gè)指令的運(yùn)行,當(dāng)輸入錯(cuò)誤時(shí),就會(huì)有聲音跑出來(lái)警告。這是怎么辦到的呢? 很簡(jiǎn)單?。∫?yàn)榈侨虢K端機(jī)的時(shí)候,會(huì)自動(dòng)的取得一些終端機(jī)的輸入環(huán)境的設(shè)定。
可以利用stty(setting teletypewriter)幫助設(shè)定終端機(jī)的輸入按鍵代表的意義:
[root@localhost ~]# stty -a speed 38400 baud; rows 36; columns 81; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; ...
如果出現(xiàn) ^ 表示 [Ctrl] 那個(gè)按鍵的意思。舉例來(lái)說(shuō), intr = ^C 表示利用 [ctrl] +c 來(lái)達(dá)成的。
幾個(gè)重要的代表意義是:
- intr : 送出一個(gè) interrupt (中斷) 的訊號(hào)給目前正在 run 的程序 (就是終止啰!);^C
- quit : 送出一個(gè) quit 的訊號(hào)給目前正在 run 的程序;^\
- erase : 向后刪除字符,^?
- kill : 刪除在目前指令列上的所有文字;^U
- eof : End of file 的意思,代表『結(jié)束輸入』。^D
- start : 在某個(gè)程序停止后,重新啟動(dòng)他的 output。^Q
- stop : 停止目前屏幕的輸出;^S
- susp : 送出一個(gè) terminal stop 的訊號(hào)給正在 run 的程序。^Z
刪除字符就是 erase 的設(shè)定值啦! 如果你想要用 [ctrl]+h 來(lái)進(jìn)行字符的刪除,那么可以下達(dá):
stty erase ^h # 這個(gè)設(shè)定看看就好,不必真的實(shí)做!不然還要改回來(lái)!
- 經(jīng)常在 Windows/Linux 之間切換,在 windows 底下,很多軟件默認(rèn)的儲(chǔ)存快捷按鈕是 [crtl]+s ,所以習(xí)慣按這個(gè)按鈕來(lái)處理。
- 不過(guò),在 Linux 底下使用 vim 時(shí),卻也經(jīng)常不小心就按下 [crtl]+s !問(wèn)題來(lái)了,按下這個(gè)組合鈕之后,整個(gè) vim 就不能動(dòng)了 (整個(gè)畫(huà)面死鎖)! 請(qǐng)問(wèn)該如何處置?
- 答:參考一下 stty -a 的輸出中,有個(gè) stop 的項(xiàng)目就是按下 [crtl]+s 的!那么恢復(fù)成 start 就是 [crtl]+q 啊!因此,嘗試按下 [crtl]+q 應(yīng)該就可以讓整個(gè)畫(huà)面重新恢復(fù)正常咯!
除了 stty 之外,其實(shí)我們的 bash 還有自己的一些終端機(jī)設(shè)定值呢!那就是利用 set 來(lái)設(shè)定的! 我 們之前提到一些變量時(shí),可以利用 set 來(lái)顯示,除此之外,其實(shí) set 還可以幫我們?cè)O(shè)定整個(gè)指令輸 出/輸入的環(huán)境。 例如記錄歷史命令、顯示錯(cuò)誤內(nèi)容等等。
[dmtsai@study ~]$ set [-uvCHhmBx] 選項(xiàng)與參數(shù): -u :預(yù)設(shè)不啟用。若啟用后,當(dāng)使用未設(shè)定變量時(shí),會(huì)顯示錯(cuò)誤訊息; -v :預(yù)設(shè)不啟用。若啟用后,在訊息被輸出前,會(huì)先顯示訊息的原始內(nèi)容; -x :預(yù)設(shè)不啟用。若啟用后,在指令被執(zhí)行前,會(huì)顯示指令內(nèi)容(前面有 ++ 符號(hào)) -h :預(yù)設(shè)啟用。與歷史命令有關(guān); -H :預(yù)設(shè)啟用。與歷史命令有關(guān); -m :預(yù)設(shè)啟用。與工作管理有關(guān); -B :預(yù)設(shè)啟用。與刮號(hào) [] 的作用有關(guān); -C :預(yù)設(shè)不啟用。若使用 > 等,則若文件存在時(shí),該文件不會(huì)被覆蓋。 范例一:顯示目前所有的 set 設(shè)定值 [dmtsai@study ~]$ echo $- himBH # 那個(gè) $- 變量?jī)?nèi)容就是 set 的所有設(shè)定啦! bash 預(yù)設(shè)是 himBH 喔! 范例二:設(shè)定 "若使用未定義變量時(shí),則顯示錯(cuò)誤訊息" [dmtsai@study ~]$ set -u [dmtsai@study ~]$ echo $vbirding -bash: vbirding: unbound variable # 預(yù)設(shè)情況下,未設(shè)定/未宣告 的變量都會(huì)是『空的』,不過(guò),若設(shè)定 -u 參數(shù), # 那么當(dāng)使用未設(shè)定的變量時(shí),就會(huì)有問(wèn)題啦!很多的 shell 都預(yù)設(shè)啟用 -u 參數(shù)。 # 若要取消這個(gè)參數(shù),輸入 set +u 即可!
另外,其實(shí)我們還有其他的按鍵設(shè)定功能。就是在 /etc/inputrc 這個(gè)文件里面設(shè)定。 還有例如 /etc/DIR_COLORS* 與 /usr/share/terminfo/* 等,也都是與終端機(jī)有關(guān)的環(huán)境配置文件案。
將 bash 默認(rèn)的組合鍵匯整如下:

5、通配符與特殊符號(hào)
在 bash 的操作環(huán)境中還有一個(gè)非常有用的功能,那就是通配符 (wildcard) ! 我們利用 bash 處理數(shù)據(jù)就更方便了!底下我們列出一些常用的通配符喔:
| 符號(hào) | 意義 |
| * | 代表0~無(wú)窮多個(gè)任意字符 |
? [] [-] | 代表一定有一個(gè)任意字符 例如 [abcd] 代表『一定有一個(gè)字符, 可能是 a, b, c, d 這四個(gè)任何一個(gè)』 若有減號(hào)在中括號(hào)內(nèi)時(shí),代表『在編碼順序內(nèi)的所有字符』。例如 [0-9] 代表 0 到 9 之間的所有數(shù)字, 因?yàn)閿?shù)字的語(yǔ)系編碼是連續(xù)的! |
| [^] | 表示『反向選擇』,例如 [^abc] 代表 一定有一個(gè)字符,只要是非 a, b, c 的其他字符就接受的意思。 |
[dmtsai@study ~]$ LANG=C <==由于與編碼有關(guān),先設(shè)定語(yǔ)系一下 范例一:找出 /etc/ 底下以 cron 為開(kāi)頭的檔名 [dmtsai@study ~]$ ll -d /etc/cron* <==加上 -d 是為了僅顯示目錄而已 范例二:找出 /etc/ 底下文件名『剛好是五個(gè)字母』的文件名 [dmtsai@study ~]$ ll -d /etc/????? <==由于 ? 一定有一個(gè),所以五個(gè) ? 就對(duì)了 范例三:找出 /etc/ 底下文件名含有數(shù)字的文件名 [dmtsai@study ~]$ ll -d /etc/*[0-9]* <==記得中括號(hào)左右兩邊均需 * 范例四:找出 /etc/ 底下,檔名開(kāi)頭非為小寫(xiě)字母的文件名: [dmtsai@study ~]$ ll -d /etc/[^a-z]* <==注意中括號(hào)左邊沒(méi)有 * 范例五:將范例四找到的文件復(fù)制到 /tmp/upper 中 [dmtsai@study ~]$ mkdir /tmp/upper; cp -a /etc/[^a-z]* /tmp/upper
除了通配符之外,bash 環(huán)境中的特殊符號(hào)有哪些呢?底下我們先匯整一下:

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Shell腳本實(shí)現(xiàn)溫和方式重啟Centos系統(tǒng)
這篇文章主要介紹了Shell腳本實(shí)現(xiàn)溫和方式重啟Centos系統(tǒng),本文腳本主要目的是用于重啟后臺(tái)比較重要的進(jìn)程,需要的朋友可以參考下2014-12-12
監(jiān)控php-fpm并自動(dòng)重啟服務(wù)的shell腳本
這篇文章主要介紹了監(jiān)控php-fpm并自動(dòng)重啟服務(wù)的shell腳本,腳本的主要功能:不斷檢查網(wǎng)站的狀態(tài),如果異常就重啟php-fpm服務(wù),需要的朋友可以參考下2014-05-05
Shell $?獲取函數(shù)返回值或者上一個(gè)命令的退出狀態(tài)
這篇文章主要介紹了Shell $?獲取函數(shù)返回值或者上一個(gè)命令的退出狀態(tài),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
linux下批量刪除utf8 bom的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇linux下批量刪除utf8 bom的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
Shell腳本創(chuàng)建指定大小文件的測(cè)試數(shù)據(jù)
這篇文章主要介紹了Shell腳本創(chuàng)建指定大小文件的測(cè)試數(shù)據(jù),本文同時(shí)給出使用DD命令和Shell腳本解決這個(gè)需求,給出的腳本功能更加強(qiáng)大,需要的朋友可以參考下2015-03-03

