運行Shell
Linux有多種圖形介面,最多人使用的是GNOME及KDE。根據你使用的圖形介面,大家運行Shell的視窗可能會不太一樣。在系統搜尋Terminal、Konsole、xterm、gnome-terminal、uxterm或其他類似的程式,開啟它來運行一個Shell。
這個視窗程式(Terminal, Konsole, etc.)不是Shell,它只是個運行著Shell的圖形程式。如下圖:
萬用字元(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
使用跳脫字元後,接下來的那一個特殊字元會被當成一般字元。
發佈留言