Linux基礎練習-04-shell

2020-08-12 19:41:09

指令碼例:
#!/bin/Bash //shell的強宣稱
#never mind what it record here, cause it just a blank. //#註釋
echo -e 「hello world」 //shell內容
注意新建的指令碼需要賦權,儲存位置預設爲bin/Bash且不推薦換地方。

使用歷史
命令使用歷史預設先放入快取中,在關機或者登出當前使用者後再儲存在/.bash_history。命令history -c清空歷史 -w立即把快取中的歷史寫入儲存檔案 檢視歷史命令。
在「history」介面,輸入「!n」可以重複執行第n條命令一次,輸入「!!」可以重複執行上一條命令一次,輸入「!***」可以重複執行以「***」開頭的命令一次。
此外,對歷史命令的操作可以通過其別名進行,但是不需要所以擱置。

輸入輸出重定向
將命令輸入/輸出至指定的檔案/裝置。
格式:命令A &>(覆蓋) &>>(追加至) 檔案B,將命令A的結果覆蓋/追加至檔案B。

多命令順序執行
com1 : com2 com1/2依次執行
com1 && com2 com1執行成功則執行com2
com1 || com2 com1執行失敗則執行com2
com1 | com2 com1執行成功的結果輸入com2執行

dd複製
格式:dd if=input of=output bs=單包大小 count=預計傳送包數。
將input以bs/包,傳送count包數,到達output。

萬用字元,只能在完全匹配命令中使用,比如ls、find、cp…
「?」 任意一個字元
「*」 0~∞個字元
「[]」 括號內字元,^內字元表示邏輯非。
如:#rm -rf *。將當前目錄下所有內容刪掉。
#grep ?ove /home。在/home目錄下搜尋所有?ove,比如aove、bove、love…
「‘’」 單引號表示其中所有內容均爲純字元且無特殊意義,比如’$ ls’表示$ ls三個字母而非ls命令。
「」」」 雙引號表示只有字元沒有特殊含義。比如「ls」表示ls兩個字母而非ls命令,但」$(ls)「表示ls命令的結果。
$() 參照系統命令。
$ 呼叫變數值。如name=a,echo name=name,則echo $name=a。
\ 跳脫符,無實際意義。

自定義變數
不能以數位開頭,且預設爲字串型。數值運算只能對數值型變數進行。命令set檢視本使用者所有變數,env查詢特定變數,unset刪除特定變數。
環境變數
在爲自定義變數賦值前用export宣告,格式:#export age=17。

PATH存放着系統命令,一般用PATH中的命令不用絕對路徑,比如:ls、cd和chown…此外用命令PS1=‘[]$’可以設計提示頭。請自行查詢設計。

參數位置設定
$n 當n=0表示命令本身,當n={1~∞}表示第1~∞個參數。
$* 命令內所有參數。
$@ 命令列每一個參數。
$?最後一次命令執行的判據,返回值爲0則成功執行。
$$ 當前進程號。
$! 後臺執行的最後一個命令。
讀取輸入參數模組:read -p輸出一個輸入提示 -t等待使用者輸入時長上限 -n只接受長度爲n的字元 -S隱藏輸入字元。

數值型參數
將參數申明爲數值型參數命令:declare -i設定爲數值型 +i取消數值型設定 參數名。除了命令,還可在賦值時直接使用符號「參數=(())=(( ))」和「參數=[ ]「能將參數設爲數值型。

變數置換方式有些複雜,一般用不上,故擱置。

Linux啓動/關機需要一系列公共設定區,其使用順序越靠後的公共設定區的相同檔案決定了該檔案內參數的實際數值,比如時間。不必掌握,故擱置。

正則表達式
作用是匹配檔案中合適的字串,只能在包含匹配中使用,如grep、awk和sed…

  • 對前一字元匹配n次。如a*,表示任意內容,因爲a可以出現0~∞次。但aa*表示以a開頭的雙字元。
    . 匹配除\以外任意字元。
    ^test 匹配以test開頭的行。
    test$ 匹配以test結尾的行。
    [] 任取括號內一個字元,[^]表示任取非括號內一個字元。
    {n,m} 對前一個字元匹配不少於n次不多於m次。例子請自行百度。

擷取
cut命令能將檔案中含某字元段的數行的第1,3列以:爲間隔摘出來:cat 檔名 | grep 某欄位 | grep -v root | cut -d 「:」 -f 1,3。但是cut只支援tab和:分隔。
print ‘%ns輸出n個字元 %ni輸出n個數字 % m.ni輸出整數m位.小數n位的浮點數(如%3.2i=123.21…)’ $cat(檔名)。
注意print不需要\n換行,但printf在’ ’結尾要加\n才能 纔能換行。
awk命令只支援tab和space間隔,格式:awk ‘條件1{動作1}條件2{動作2}…’ 檔名。可以對檔案連續進行一些列操作。
eg:#df -h | grep sda5 | awk ‘{print $5}’ | cut -d 「%」 -f 1。意爲在分割區資訊介面的sda5行,輸出第五列,然後再刪掉%間隔後輸出第五列的第一列(也就是第五列本身)。如果要讀其它分割號,則必須在條件1{動作1}輸入「BEGIN{FS=「:」}」,即可讀取:間隔檔案。
sed命令可以在擷取的同時對檔案進行修改。命令:#sed -n只將sed的處理行輸出 -i將sed修改儲存至原檔案 ‘動作 a\追加 c\替換 i\插入 d刪除 P行’ 檔名。eg:#sed -i ‘2a hello’ file。在file的第二行後追加hello。