shell相關(guān)

hell 簡單點理解,就是系統(tǒng)跟計算機硬件交互時使用的中間介質(zhì),它只是系統(tǒng)的一個工具。用戶直接面對的不是計算機硬件而是 shell,用戶把指令告訴 shell,然后 shell 再傳輸給系統(tǒng)內(nèi)核,接著內(nèi)核再去支配計算機硬件去執(zhí)行各種操作。Redhat/CentOS 系統(tǒng)默認安裝的 shell 叫做 bash,即 Bourne Again Shell,它是 sh(Bourne Shell)的增強版本

我們敲過的命令,linux 是會有記錄的,默認可以記錄 1000 條歷史命令。這些命令保存在用

戶的家目錄中的.bash_history 文件中。有一點需要您知道的是,只有當用戶正常退出當前shell 時,在當前 shell 中運行的命令才會保存至.bash_history 文件中。

與命令歷史有關(guān)的有一個有意思的字符那就是 ‘!’ 了。常用的有這么幾個應(yīng)用:

1) !! 連續(xù)兩個 ‘!’, 表示執(zhí)行上一條指令;

2) !n 這里的 n 是數(shù)字,表示執(zhí)行命令歷史中第 n 條指令,例如 !12 表示執(zhí)行命令歷史中

第 12 個命令;

指令和文件名補全

它就是按 tab 鍵,它可以幫您補全一個指令,也可以幫您補全一個路徑或者一個文件名。連

續(xù)按兩次 tab 鍵,系統(tǒng)則會把所有的指令或者文件名都列出來。

別名

我們可以通過

alias 把一個常用的并且很長的指令別名一個簡潔易記的指令。如果不想用了,

還可以用 unalias 解除別名功能。直接敲 alias 會看到目前系統(tǒng)默認的 alias.

系統(tǒng)默認的 alias 指令也就這幾個而已,您也可以自定義您想要的指令別名。alias 語法很簡

單, alias [命令別名]=['具體的命令']

通配符

在bash 下,可以使用 * 來匹配零個或多個字符,而用 ? 匹配一個字符。

輸入輸出重定向

輸入重定向用于改變命令的輸入,輸出重定向用于改變命令的輸出。輸出重定向更為常用,

它經(jīng)常用于將命令的結(jié)果輸入到文件中,而不是屏幕上。輸入重定向的命令是<,輸出重定

向的命令是>,另外還有錯誤重定向 2>,以及追加重定向>>

管道符

前面已經(jīng)提過過管道符 “|”, 就是把前面的命令運行的結(jié)果丟給后面的命令。

作業(yè)控制

當運行一個進程時,您可以使它暫停(按Ctrl+z),然后使用 fg 命令恢復它,利用 bg 命令使

他到后臺運行,您也可以使它終止(按 Ctrl+c)。

環(huán)境變量

環(huán)境變量分為系統(tǒng)環(huán)境變量和用戶環(huán)境變量。系統(tǒng)環(huán)境變量,對所有用戶起作用,而用戶環(huán)

境變量只對當前用戶起作用。

系統(tǒng)環(huán)境變量:

/etc/profile:此文件為系統(tǒng)的每個用戶設(shè)置環(huán)境信息,當用戶第一次登錄時,該文件被執(zhí)行.并

從/etc/profile.d 目錄的配置文件中搜集 shell 的設(shè)置.

/etc/bashrc:

為每一個運行 bash shell 的用戶執(zhí)行此文件.當 bash shell 被打開時,該文件被讀取.當前用戶變量:

~/.bash_profile:

每個用戶都可使用該文件輸入專用于自己使用的 shell 信息,當用戶登錄時,該

文件僅僅執(zhí)行一次!默認情況下,他設(shè)置一些環(huán)境變量,執(zhí)行用戶的.bashrc 文件.

~/.bashrc:該文件包含專用于你的 bash shell 的 bash 信息,當?shù)卿洉r以及每次打開新的 shell 時,該該文件被讀取.

~/.bash_logout:

當每次退出系統(tǒng)(退出 bash shell)時,執(zhí)行該文件。

注:這些文件很多都是隱藏文件,想要查看可以在ls 命令之后加上參數(shù) -a來顯示隱藏文件。

1.顯示環(huán)境變量 HOME

[azureuser@mono tmp]$ echo $PATH

2.

設(shè)置一個新的環(huán)境變量 NAME

[azureuser@mono tmp]$ export NAME="lichao"

[azureuser@mono tmp]$ echo $NAME

lichao

3.使用 env 命令顯示所有的環(huán)境變量[azureuser@mono tmp]$ env

Shell 特殊符號

* 代表零個或多個字符或數(shù)字。

? 只代表一個任意的字符

# 這個符號在 linux 中表示注釋說明的意思,即 # 后面的內(nèi)容 linux 忽略掉。

\ 脫意字符,將后面的特殊符號(例如”*” )還原為普通字符。

| 管道符,前面多次出現(xiàn)過,它的作用在于將符號前面命令的結(jié)果丟給符號后面的命令。

這里提到的后面的命令,并不是所有的命令都可以的,一般針對文檔操作的命令比較常

用,例如 cat, less, head, tail, grep, cut, sort, wc, uniq, tee, tr, split, sed, awk 等等,其中 grep,sed, awk 為正則表達式必須掌握的工具

$ 除了用于變量前面的標識符外,還有一個妙用,就是和 ‘!’ 結(jié)合起來使用。

?; 分號。平時我們都是在一行中敲一個命令,然后回車就運行了,那么想在一行中運

行兩個或兩個以上的命令如何呢?則需要在命令之間加一個 ”;” 了。

?~ 用戶的家目錄,如果是 root 則是 /root ,普通用戶則是 /home/username

& 如果想把一條命令放到后臺執(zhí)行的話,則需要加上這個符號。通常用于命令運行時

間非常長的情況。

?>, >>, 2>, 2>> 前面講過重定向符號> 以及>> 分別表示取代和追加的意思,然后還有兩

個符號就是這里的 2> 和 2>> 分別表示錯誤重定向和錯誤追加重定向,當我們運行一

個命令報錯時,報錯信息會輸出到當前的屏幕,如果想重定向到一個文本里,則要用2>或者 2>>

[ ] 中括號,中間為字符組合,代表中間字符中的任意一個。

&& 與 ||,用于多條命令中間的特殊符號

Shell 腳本的基本結(jié)構(gòu)

#! /bin/bash

## This is first bash shell on centos

## Written by Geffzhang 2013.8.18

date '+%Y-%m-%d %H:%M:%S'

echo "Hello world!"

Shell 腳本通常都是以.sh 為后綴名的, 大家一看到.sh 文件就知道這是個 Shell 腳本。helloworld.sh 中第一行要以 “#! /bin/bash” 開頭,它代表的意思是,該文件使用的是 bash語法。如果不設(shè)置該行,雖然您的shell腳本也可以執(zhí)行,但是這不符合規(guī)范。# 表示注釋,在前面講過的。后面跟一些該腳本的相關(guān)注釋內(nèi)容。腳本的注釋雖然不是必須的,建議不要省略了。因為隨著您寫的 shell 腳本越來越多,如果有一天您回頭查看自己寫過的某個腳本時,很有可能忘記該腳本是用來干什么的以及什么時候?qū)懙?。所以寫上注釋是有必要的。而且系統(tǒng)管理員并非只有您一個,如果是其他管理員查看您的腳本,他看不懂豈不是很郁悶.

另外使用 sh 命令去執(zhí)行一個 shell 腳本的時候是可以加-x 選項來查看這個腳本執(zhí)行過程的,這樣有利于我們調(diào)試這個腳本哪里出了問題:

[azureuser@mono sbin]$ sh -x helloworld.sh

+ date '+%Y-%m-%d %H:%M:%S'

2013-08-18 07:33:08

+ echo 'Hello world!'

Hello world!

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

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

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