知識點1:什麼是shell內建命令?
shell內建命令,就是由 bash 自身提供的命令,而不是檔案系統中的某個可執行檔案。
內建命令與普通命令的性質是不一樣的,內建命令並不是某個外部檔案,只要在shell中就一定可以執行這個命令。
知識點2:怎麼確定乙個命令是否是內建命令?
使用type可以區分,例如cd,cat,ifconfig
type cd----->cd is a shell builtin
type ifconfig----->ifconfig is /sbin/ifconfig
type cat----->cat is /bin/cat
由此可見,cd 是乙個 shell 內建命令,而 ifconfig 是乙個外部檔案,它的位置是/sbin/ifconfig
。
知識點3:執行內建命令與普通命令的區別?
系統變數$path 包含的目錄中幾乎聚集了系統中絕大多數的可執行命令,它們都是外部命令。
通常來說,內建命令會比外部命令執行得更快,執行外部命令時不但會觸發磁碟 i/o,還需要 fork 出乙個單獨的程序來執行,執行完成後再退出。而執行內建命令相當於呼叫當前 shell 程序的乙個函式。
bash shell 中的內建命令
命令說明
用法例項
:擴充套件引數列表,執行重定向操作
.讀取並執行指定檔案中的命令(在當前 shell 環境中)
alias
為指定命令定義乙個別名
1.檢視當前程序中的所有別名 alias
2.在當前程序中設定別名alias new_name='command'
別名只是臨時的,在**中使用 alias 命令定義的別名只能在當前 shell 程序中使用,在子程序和其它程序中都不能使用。當前 shell 程序結束後,別名也隨之消失。
3.要想讓別名對所有的 shell 程序都有效,就得把別名寫入shell 配置檔案
4.unalias後跟上某個命令的別名,用於刪除指定的別名
5.unalias後跟上-a,刪除當前 shell程序中所有的別名。
設定別名
alias timestamp='date +%s'
執行timestamp輸出(當前時間戳)
刪除別名
unalias ll
再次執行ll報(-bash: ll: 未找到命令)
bg將作業以後臺模式執行
bind
將鍵盤序列繫結到乙個 readline 函式或巨集
break
退出 for、while、select 或 until 迴圈
builtin
執行指定的 shell 內建命令
caller
返回活動子函式呼叫的上下文
cd將當前目錄切換為指定的目錄
command
執行指定的命令,無需進行通常的 shell 查詢
compgen
為指定單詞生成可能的補全匹配
complete
顯示指定的單詞是如何補全的
compopt
修改指定單詞的補全選項
continue
繼續執行 for、while、select 或 until 迴圈的下一次迭代
declare
宣告乙個變數或變數型別。
dirs
顯示當前儲存目錄的列表
disown
從程序作業表中刪除指定的作業
echo
將指定字串輸出到 stdout
enable
啟用或禁用指定的內建shell命令
eval
將指定的引數拼接成乙個命令,然後執行該命令
exec
用指定命令替換 shell 程序
exit
強制當前shell程序以指定的退出狀態碼退出
使用$?
可以接收這個退出狀態
exit 命令可以接受乙個整數值作為引數,代表退出狀態。如果不指定,預設狀態值是 0。exit 退出狀態只能是乙個介於 0~255 之間的整數,其中只有 0 表示成功,其它值都表示失敗。
shell 程序執行出錯時,可以根據退出狀態來判斷具體出現了什麼錯誤,比如開啟乙個檔案時,我們可以指定 1 表示檔案不存在,2 表示檔案沒有讀取許可權,3 表示檔案型別不對。
#!/bin/bash
echo "befor exit"
exit 8
echo "after exit"
執行該指令碼:bash ./test.sh———>befor exit
可以看到,"after exit"
並沒有輸出,這說明遇到 exit 命令後,test.sh 執行就結束了。
注意,exit 表示退出當前 shell 程序,我們必須在新程序中執行 test.sh,否則當前 shell 會話(終端視窗)會被關閉,我們就無法看到輸出結果了。我們可以緊接著使用
$?
來獲取 test.sh 的退出狀態:
echo $?————>8
export
設定子 shell 程序可用的變數
fc從歷史記錄中選擇命令列表
fg將作業以前臺模式執行
getopts
分析指定的位置引數
hash
查詢並記住指定命令的全路徑名
help
顯示幫助檔案
history
顯示命令歷史記錄
jobs
列出活動作業
kill
向指定的程序 id(pid) 傳送乙個系統訊號
let計算乙個數學表示式中的每個引數
local
在函式中建立乙個作用域受限的變數
logout
退出登入 shell
mapfile
從 stdin 讀取資料行,並將其加入索引陣列
popd
從目錄棧中刪除記錄
printf
使用格式化字串顯示文字
pushd
向目錄棧新增乙個目錄
pwd顯示當前工作目錄的路徑名
read
從 stdin 讀取一行資料並將其賦給乙個變數。
readarray
從 stdin 讀取資料行並將其放入索引陣列
readonly
從 stdin 讀取一行資料並將其賦給乙個不可修改的變數
return
強制函式以某個值退出,這個值可以被呼叫指令碼提取
set設定並顯示環境變數的值和 shell 屬性
shift
將位置引數依次向下降乙個位置
shopt
開啟/關閉控制 shell 可選行為的變數值
source
讀取並執行指定檔案中的命令(在當前 shell 環境中)
suspend
暫停 shell 的執行,直到收到乙個 sigcont 訊號
test
基於指定條件返回退出狀態碼 0 或 1
times
顯示累計的使用者和系統時間
trap
如果收到了指定的系統訊號,執行指定的命令
type
顯示指定的單詞如果作為命令將會如何被解釋
typeset
宣告乙個變數或變數型別。
基本上已棄用
ulimit
為系統使用者設定指定的資源的上限
umask
為新建的檔案和目錄設定預設許可權
unalias
刪除指定的別名
unset
刪除指定的環境變數或 shell 屬性
wait
等待指定的程序完成,並返回退出狀態碼
shell 內建命令 exec
exec 命令並不啟動新的 shell,而是用要被執行的命令替換當前的 shell 程序,並且將老程序的環境清理掉,exec 命令後的其它命令將不再執行。exec 在執行時會將當前的 shell process 關閉,然後切換到後面的命令繼續執行。在乙個 shell 中執行 exec ls,列出當前...
Shell內建命令簡介
shell內建命令是由bash自身提供的命令,而不是檔案系統中的某個可執行檔案。判斷乙個命令是否是內建命令可以通過type命令,如 type cd type date輸出分別為 cd is a shell builtin date is bin date可以看出cd是內建命令,而date是乙個外部檔...
shell內建命令分析
輸入命令 break 跳出迴圈 builtin 執行shell builtin caller 返回當前子例程呼叫的上下文 cd 改變工作目錄,將目前工作目錄改變到指定的目錄下 command 執行簡單命令或顯示有關命令的資訊 compgen 命令自動補全,根據選項顯示可能的完成情況 complete...