LINUX

LINUX SHELL介紹

運行Shell

Linux有多種圖形介面,最多人使用的是GNOME及KDE。根據你使用的圖形介面,大家運行Shell的視窗可能會不太一樣。在系統搜尋Terminal、Konsole、xterm、gnome-terminal、uxterm或其他類似的程式,開啟它來運行一個Shell。

這個視窗程式(Terminal, Konsole, etc.)不是Shell,它只是個運行著Shell的圖形程式。如下圖:

mt01

萬用字元(Wildcards)

* Zero or more consecutive characters. ? Any single character. [set] Any single character in the given set, most commonly a sequence of characters, like [aeiouAEIOU] for all vowels, or a range with a dash, like [A-Z] for all capital letters. [^set] Any single character not in the given set, such as [^0-9] to mean any nondigit. [!set] Same as [^set].
Code language: plaintext (plaintext)

你可以使用下列指令來列出所有a開頭的檔案及a開頭檔案夾內的所有檔案:

⤍ ls a* afile aafile aaafile
Code language: Bash (bash)

使用萬用字元時,./永遠不會被找到,需要自己打出來。如下:

⤍ ls .pro* .profile ⤍ ls *ile
Code language: Bash (bash)

使用下面的指令時.profile不會被找到。

Brace expansion

可以對任何字串使用Brace expansion,直接看範例:

echo he{A,BB,CCC}llo heAllo heBBllo heCCCllo
Code language: Bash (bash)

第一次用A執行,再來用BB執行,最後用CCC執行。不同於萬用字元的是Brace expansion每次都會擴展執行而萬用字元需要與檔名一致才會擴展執行。

變數(Variable)

你可以自訂一個變數並給予一個值:

⤍ TEST=3
Code language: Bash (bash)

要使用此變數時,前面需要加上$符號:

echo $TEST 3
Code language: Bash (bash)

有一些變數在你登入時就已經存在了。如下:

DISPLAY The name of your X window display. HOME Your home directory, such as /home/mt. LOGNAME Your login name, such as mt. MAIL Your incoming mailbox. OLDPWD Your shell's previous directory, prior to the last cd command. PATH Your shell search path: directories separated by colons. SHELL The path to your shell (e.g., /bin/bash). TERM The type of your terminal (e.g., xterm or vt100). USER Your login name.
Code language: plaintext (plaintext)

要讓自己定義的變數讓其他程式也可以用,我們需要使用export

export TEST
Code language: Bash (bash)

或是直接:

export TEST=3
Code language: Bash (bash)

使用export後,這個變數就變成一個環境變數(Environment variable)了,其他程式也可以存取。

你可以列出所有或個別環境變數的值:

⤍ printenv ... ⤍ printenv HOME /home/mt
Code language: Bash (bash)

搜尋路徑(Search path)

當我們從Shell執行一個程式時,Shell會去尋找環境變數PATH,裡面包含了一些由冒號隔開的檔案夾:

echo $PATH /usr/local/bin:/usr/bin:/bin
Code language: Bash (bash)

並從這些檔案夾裡找出要執行的程式。若程式不存在,會顯示錯誤訊息:

bash: example: command not found
Code language: Bash (bash)

你可以把一個檔案夾暫時新增到環境變數PATH裡:

⤍ PATH=$PATH:/usr/temp ⤍ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/temp
Code language: Bash (bash)

當你重開或關閉Shell時,這些暫時改變或自己新增的變數就會被刪除。要更改一個環境變數的預設值,我們需要去修改~/.bash_profile檔案。

Combining commands

要讓多個指令在同一個指令上依序執行我們可以用分號把指令隔開:

⤍ command1 ; command2 ; command3
Code language: Bash (bash)

上面的指令無論是否有錯誤都會被執行。如果你想要當前面發現錯誤後面就不執行的話,你可以把分號換成&&

⤍ command1 && command2 && command3
Code language: Bash (bash)

如果你想要當前面執行成功後面就不執行的話,你可以把分號換成||

⤍ command1 || command2 || command3
Code language: Bash (bash)

引號(Quoting)

單引號裡的特殊字元(如$)都會被當作是一般字元:

echo '$HOME is my home' $HOME is my home
Code language: Bash (bash)

雙引號裡的特殊字元會被evaluate:

echo "$HOME is my home" /home/mt is my home
Code language: Bash (bash)

跳脫(Escaping)

跳脫字元其實就是一個反斜線\,它專門用來跳脫特殊符號:

echo "$HOME is my home" /home/mt is my home ⤍ echo "\$HOME is my home" $HOME is my home
Code language: Bash (bash)

使用跳脫字元後,接下來的那一個特殊字元會被當成一般字元。

發佈留言