Shell脚本——内置命令
一、內(nèi)置命令
所謂 Shell 內(nèi)置命令,就是由 Bash 自身提供的命令,而不是文件系統(tǒng)中的某個可執(zhí)行文件。
例如,用于進入或者切換目錄的 cd 命令,雖然我們一直在使用它,但如果不加以注意很難意識到它與普通命令的性質(zhì)是不一樣的:該命令并不是某個外部文件,只要在 Shell 中你就一定可以運行這個命令。
可以使用 type 來確定一個命令是否是內(nèi)建命令:
[root@localhost ~]# type cd cd is a Shell builtin [root@localhost ~]# type ifconfig ifconfig is /sbin/ifconfig由此可見,cd 是一個 Shell 內(nèi)建命令,而 ifconfig 是一個外部文件,它的位置是/sbin/ifconfig。
還記得系統(tǒng)變量 PATH嗎?PATH嗎?PATH嗎?PATH 變量包含的目錄中幾乎聚集了系統(tǒng)中絕大多數(shù)的可執(zhí)行命令,它們都是外部命令。
通常來說,內(nèi)建命令會比外部命令執(zhí)行得更快,執(zhí)行外部命令時不但會觸發(fā)磁盤 I/O,還需要 fork 出一個單獨的進程來執(zhí)行,執(zhí)行完成后再退出。而執(zhí)行內(nèi)建命令相當于調(diào)用當前 Shell 進程的一個函數(shù)。
二、alisa命令
alisa 用來給命令創(chuàng)建一個別名。若直接輸入該命令且不帶任何參數(shù),則列出當前 Shell 進程中使用了哪些別名。現(xiàn)在你應該能理解類似ll這樣的命令為什么與ls -l的效果是一樣的吧。
三、echo命令
echo 是一個 Shell 內(nèi)建命令,用來在終端輸出字符串,并在最后默認加上換行符。
echo 命令輸出結(jié)束后默認會換行,如果不希望換行,可以加上-n參數(shù)
默認情況下,echo 不會解析以反斜杠\開頭的轉(zhuǎn)義字符。比如,\n表示換行,echo 默認會將它作為普通字符對待,我們可以添加-e參數(shù)來讓 echo 命令解析轉(zhuǎn)義字符
有了-e參數(shù),我們也可以使用轉(zhuǎn)義字符\c來強制 echo 命令不換行了
四、read命令
read 是 Shell 內(nèi)置命令,用來從標準輸入中讀取數(shù)據(jù)并賦值給變量。如果沒有進行重定向,默認就是從鍵盤讀取用戶輸入的數(shù)據(jù);如果進行了重定向,那么可以從文件中讀取數(shù)據(jù)。
read 命令的用法為:
read [-options] [variables]options表示選項,如下表所示;variables表示用來存儲數(shù)據(jù)的變量,可以有一個,也可以有多個。
options和variables都是可選的,如果沒有提供變量名,那么讀取的數(shù)據(jù)將存放到環(huán)境變量 REPLY 中。
| -a array | 把讀取的數(shù)據(jù)賦值給數(shù)組 array,從下標 0 開始。 |
| -d delimiter | 用字符串 delimiter 指定讀取結(jié)束的位置,而不是一個換行符(讀取到的數(shù)據(jù)不包括 delimiter)。 |
| -e | 在獲取用戶輸入的時候,對功能鍵進行編碼轉(zhuǎn)換,不會直接顯式功能鍵對應的字符。 |
| -n num | 讀取 num 個字符,而不是整行字符。 |
| -p prompt | 顯示提示信息,提示內(nèi)容為 prompt。 |
| -r | 原樣讀取(Raw mode),不把反斜杠字符解釋為轉(zhuǎn)義字符。 |
| -s | 靜默模式(Silent mode),不會在屏幕上顯示輸入的字符。當輸入密碼和其它確認信息的時候,這是很有必要的。 |
| -t seconds | 設(shè)置超時時間,單位為秒。如果用戶沒有在指定時間內(nèi)輸入完成,那么 read 將會返回一個非 0 的退出 |
五、exit命令
exit 是一個 Shell 內(nèi)置命令,用來退出當前 Shell 進程,并返回一個退出狀態(tài);使用$?可以接收這個退出狀態(tài);
exit 命令可以接受一個整數(shù)值作為參數(shù),代表退出狀態(tài)。如果不指定,默認狀態(tài)值是 0。
一般情況下,退出狀態(tài)為 0 表示成功,退出狀態(tài)為非 0 表示執(zhí)行失敗(出錯)了。
exit 退出狀態(tài)只能是一個介于 0~255 之間的整數(shù),其中只有 0 表示成功,其它值都表示失敗。
Shell 進程執(zhí)行出錯時,可以根據(jù)退出狀態(tài)來判斷具體出現(xiàn)了什么錯誤,比如打開一個文件時,我們可以指定 1 表示文件不存在,2 表示文件沒有讀取權(quán)限,3 表示文件類型不對。
六、下表列出了 Bash Shell 中直接可用的內(nèi)建命令
| : | 擴展參數(shù)列表,執(zhí)行重定向操作 |
| . | 讀取并執(zhí)行指定文件中的命令(在當前 shell 環(huán)境中) |
| alias | 為指定命令定義一個別名 |
| bg | 將作業(yè)以后臺模式運行 |
| bind | 將鍵盤序列綁定到一個 readline 函數(shù)或宏 |
| break | 退出 for、while、select 或 until 循環(huán) |
| builtin | 執(zhí)行指定的 shell 內(nèi)建命令 |
| caller | 返回活動子函數(shù)調(diào)用的上下文 |
| cd | 將當前目錄切換為指定的目錄 |
| command | 執(zhí)行指定的命令,無需進行通常的 shell 查找 |
| compgen | 為指定單詞生成可能的補全匹配 |
| complete | 顯示指定的單詞是如何補全的 |
| compopt | 修改指定單詞的補全選項 |
| continue | 繼續(xù)執(zhí)行 for、while、select 或 until 循環(huán)的下一次迭代 |
| declare | 聲明一個變量或變量類型。 |
| dirs | 顯示當前存儲目錄的列表 |
| disown | 從進程作業(yè)表中刪除指定的作業(yè) |
| echo | 將指定字符串輸出到 STDOUT |
| enable | 啟用或禁用指定的內(nèi)建shell命令 |
| eval | 將指定的參數(shù)拼接成一個命令,然后執(zhí)行該命令 |
| exec | 用指定命令替換 shell 進程 |
| exit | 強制 shell 以指定的退出狀態(tài)碼退出 |
| export | 設(shè)置子 shell 進程可用的變量 |
| fc | 從歷史記錄中選擇命令列表 |
| fg | 將作業(yè)以前臺模式運行 |
| getopts | 分析指定的位置參數(shù) |
| hash | 查找并記住指定命令的全路徑名 |
| help | 顯示幫助文件 |
| history | 顯示命令歷史記錄 |
| jobs | 列出活動作業(yè) |
| kill | 向指定的進程 ID(PID) 發(fā)送一個系統(tǒng)信號 |
| let | 計算一個數(shù)學表達式中的每個參數(shù) |
| local | 在函數(shù)中創(chuàng)建一個作用域受限的變量 |
| logout | 退出登錄 shell |
| mapfile | 從 STDIN 讀取數(shù)據(jù)行,并將其加入索引數(shù)組 |
| popd | 從目錄棧中刪除記錄 |
| printf | 使用格式化字符串顯示文本 |
| pushd | 向目錄棧添加一個目錄 |
| pwd | 顯示當前工作目錄的路徑名 |
| read | 從 STDIN 讀取一行數(shù)據(jù)并將其賦給一個變量 |
| readarray | 從 STDIN 讀取數(shù)據(jù)行并將其放入索引數(shù)組 |
| readonly | 從 STDIN 讀取一行數(shù)據(jù)并將其賦給一個不可修改的變量 |
| return | 強制函數(shù)以某個值退出,這個值可以被調(diào)用腳本提取 |
| set | 設(shè)置并顯示環(huán)境變量的值和 shell 屬性 |
| shift | 將位置參數(shù)依次向下降一個位置 |
| shopt | 打開/關(guān)閉控制 shell 可選行為的變量值 |
| source | 讀取并執(zhí)行指定文件中的命令(在當前 shell 環(huán)境中) |
| suspend | 暫停 Shell 的執(zhí)行,直到收到一個 SIGCONT 信號 |
| test | 基于指定條件返回退出狀態(tài)碼 0 或 1 |
| times | 顯示累計的用戶和系統(tǒng)時間 |
| trap | 如果收到了指定的系統(tǒng)信號,執(zhí)行指定的命令 |
| type | 顯示指定的單詞如果作為命令將會如何被解釋 |
| typeset | 聲明一個變量或變量類型。 |
| ulimit | 為系統(tǒng)用戶設(shè)置指定的資源的上限 |
| umask | 為新建的文件和目錄設(shè)置默認權(quán)限 |
| unalias | 刪除指定的別名 |
| unset | 刪除指定的環(huán)境變量或 shell 屬性 |
| wait | 等待指定的進程完成,并返回退出狀態(tài)碼 |
總結(jié)
以上是生活随笔為你收集整理的Shell脚本——内置命令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysqlreport的学习
- 下一篇: Java并发篇_volatile