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].

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

⤍ ls a*
afile  aafile  aaafile

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

⤍ ls .pro*
.profile

⤍ ls *ile

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

Brace expansion

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

⤍ echo he{A,BB,CCC}llo
heAllo  heBBllo  heCCCllo

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

變數(Variable)

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

⤍ TEST=3

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

⤍ echo $TEST
3

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

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.

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

⤍ export TEST

或是直接:

⤍ export TEST=3

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

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

⤍ printenv
...

⤍ printenv HOME
/home/mt

搜尋路徑(Search path)

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

⤍ echo $PATH
/usr/local/bin:/usr/bin:/bin

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

bash: example: command not found

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

⤍ PATH=$PATH:/usr/temp

⤍ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/temp

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

Combining commands

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

⤍ command1 ; command2 ; command3

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

⤍ command1 && command2 && command3

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

⤍ command1 || command2 || command3

引號(Quoting)

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

⤍ echo '$HOME is my home'
$HOME is my home

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

⤍ echo "$HOME is my home"
/home/mt is my home

跳脫(Escaping)

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

⤍ echo "$HOME is my home"
/home/mt is my home

⤍ echo "\$HOME is my home"
$HOME is my home

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

發佈留言