bash的工作特性之命令執(zhí)行狀態(tài)返回值和命令行展開(kāi)所涉及的內(nèi)容及其示例演示。

Bash shell 的功能

bash是GNU計(jì)劃中最重要的工具軟件之一,目前也是Linux distributions的標(biāo)準(zhǔn)SHELL。bash主要兼容于SH,并且依據(jù)一些使用者需求,而加強(qiáng)版的shell版本。bash主要的特性有底下幾個(gè):

  • 命令歷史(history):

只要在指令列按【上下鍵】就可以找到前/后一個(gè)輸入的指令。而在很多distribution里頭,默認(rèn)的指令記憶功能可以達(dá)到1000個(gè)。
這么多的指令記錄在家目錄內(nèi)的.bash_history,需要注意的是~/.bash_history記錄的是前一次登入以前所執(zhí)行過(guò)的指令,而至于這一次登入所執(zhí)行的指令都被暫存在內(nèi)存中,當(dāng)你成功注銷系統(tǒng)后,該指令記憶才會(huì)記錄到.bash_history當(dāng)中!
####### 命令語(yǔ)法格式:
history [-c] [-d OFFSET] [n]
history -anrw [FILENAME]
history -ps VALUE [VALUE…]
####### 命令的選項(xiàng)
-c: 清空命令歷史;
-d offset(偏移量):刪除指定命令歷史,offset為history顯示出來(lái)的命令數(shù)字
-r: 從文件讀取命令歷史至歷史列表中;
-w:把歷史列表中的命令追加至歷史文件中;
history #:顯示最近的#條命令;


  • 命令與檔案補(bǔ)全功能([tab]按鍵的好處):
  • [Tab]接在一串指令的第一個(gè)字的后面,則為命令補(bǔ)全;
  • [Tab]接在一串指令的第二個(gè)字的后面,則為檔案補(bǔ)齊;
    所以如果我想知道環(huán)境中可以執(zhí)行的指令有幾個(gè),就直接在bash的提示字符后面連續(xù)按兩次TAB。例如想知道以C開(kāi)頭的指令,就按下c【tab】【tab】。
    ————————————————————
  • 命令別名設(shè)定功能(alias):

假如我需要知道這個(gè)目錄底下的所有檔案(包含隱藏檔)及所有的文件屬性,那么需要輸入ls -al這樣的指令,經(jīng)常輸入同一個(gè)指令就會(huì)覺(jué)得非常麻煩,因此才會(huì)用到命令別名??梢灾苯佑胠m這個(gè)自定義的命令來(lái)取代上面的命令。lm=ls -al這個(gè)功能,可以在指令列輸入alias就可以知道目前的命令別名有哪些了,也可以直接下達(dá)命令來(lái)設(shè)定別名:

alias lm='ls -al'
####### 語(yǔ)法
alias name='COMMAND'


  • 快捷鍵:

Ctrl+a:跳轉(zhuǎn)至命令行行首
Ctrl+e:跳轉(zhuǎn)至命令行行尾
Ctrl+u:刪除行首至光標(biāo)所在處之間的所有字符;
Ctrl+k:刪除光標(biāo)所在處至行尾的所有字符;
Ctrl+l:清屏,相當(dāng)于clear
——————————————————————

  • 命令行展開(kāi):

以某些bash能夠解釋的符號(hào)來(lái)代替命令中的某些參數(shù)。
~:展開(kāi)為用戶的家目錄;
例:切換至家目錄
cd ~;pwd
/root
{}:可承載一個(gè)以逗號(hào)分隔的列表,并將其展開(kāi)為多個(gè)路徑;
例:在/tmp/d目錄下創(chuàng)建f1,f2,f3三個(gè)文件
touch /tmp/d/f{1,2,3}
bash


  • 命令的執(zhí)行狀態(tài)結(jié)果:
    bash的基礎(chǔ)特性之狀態(tài)值返回:在bash中使用一個(gè)特殊的變量$?來(lái)保存上一個(gè)命令的執(zhí)行狀態(tài)結(jié)果。
    0表示成功,
    1-255表示失敗
    例如:

  • 變量

變量引用:


變量替換:把變量引用符號(hào)出現(xiàn)的位置替換為其指向的內(nèi)存空間中的數(shù)據(jù);

bash變量種類:

本地變量:作用域?yàn)楫?dāng)前shell進(jìn)程;不包括其子進(jìn)程;

環(huán)境變量:使用域?yàn)楫?dāng)前shell進(jìn)程及其子進(jìn)程;

局部變量:

作用域:生效范圍,也即可引用到的范圍;

本地變量:
變量賦值:NAME=VALUE

變量引用:



  • 工作控制、前景背景控制(job contril,foreground,background):

舉例來(lái)說(shuō),我們?cè)诘顷?bash 后, 想要一邊復(fù)制文件、一邊進(jìn)行數(shù)據(jù)搜尋、一邊進(jìn)行編譯,還可以一邊進(jìn)行 vi 程序撰寫! 當(dāng)然我們可以重復(fù)登陸那六個(gè)文字介面的終端機(jī)環(huán)境中,不過(guò),能不能在一個(gè) bash 內(nèi)達(dá)成? 當(dāng)然可以?。【褪鞘褂?job control 啦!

進(jìn)行工作管理的行為中, 其實(shí)每個(gè)工作都是目前 bash 的子程序,亦即彼此之間是有相關(guān)性的。 我們無(wú)法以 job control 的方式由 tty1 的環(huán)境去管理 tty2 的 bash !

或許你會(huì)覺(jué)得很奇怪啊,既然我可以在六個(gè)終端介面登陸,那何必使用 job control 呢? 真是脫褲子放屁,多此一舉??!不要忘記了呢,我們可以在 /etc/security/limits.conf 里面配置使用者同時(shí)可以登陸的連線數(shù),在這樣的情況下,某些使用者可能僅能以一個(gè)連線來(lái)工作呢! 所以羅,你就得要了解一下這種工作管理的模式了!

由於假設(shè)我們只有一個(gè)終端介面,因此在可以出現(xiàn)提示字節(jié)讓你操作的環(huán)境就稱為前景 (foreground),至於其他工作就可以讓你放入背景 (background) 去暫?;蜻\(yùn)行。要注意的是,放入背景的工作想要運(yùn)行時(shí), 他必須不能夠與使用者互動(dòng)。舉例來(lái)說(shuō), vim 絕對(duì)不可能在背景里面運(yùn)行 (running) 的!因?yàn)槟銢](méi)有輸入數(shù)據(jù)他就不會(huì)跑?。?而且放入背景的工作是不可以使用 [ctrl]+c 來(lái)終止的』!

總之,要進(jìn)行 bash 的 job control 必須要注意到的限制是:

這些工作所觸發(fā)的程序必須來(lái)自於你 shell 的子程序(只管理自己的 bash);
前景:你可以控制與下達(dá)命令的這個(gè)環(huán)境稱為前景的工作 (foreground);
背景:可以自行運(yùn)行的工作,你無(wú)法使用 [ctrl]+c 終止他,可使用 bg/fg 呼叫該工作;
背景中『運(yùn)行』的程序不能等待 terminal/shell 的輸入(input)


  • 程序化腳本(shell scripts):
shell腳本執(zhí)行方式

1.直接當(dāng)做命令下達(dá):該檔案必須有rx權(quán)限,然后必須可以找到該命令,即要么通過(guò)絕對(duì)路徑或相對(duì)路徑,或者利用環(huán)境變量PATH
2.以bash程序來(lái)執(zhí)行:通過(guò)bash shell.sh或許sh shell.sh來(lái)執(zhí)行(shell.sh是我們寫好的腳本)。


  • 通配符:
  • brace expansion (花括號(hào)擴(kuò)展)
  • tilde expansion (波浪號(hào)擴(kuò)展)
  • parameter and variable expansion (參數(shù)和變量擴(kuò)展)
  • arithmetic expansion (算術(shù)擴(kuò)展)
  • command substitution (命令置換)
  • word splitting (單詞分割)
  • filename expansion (文件名擴(kuò)展)
  • process substitution(進(jìn)程替換)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容