shell內建命令

2022-07-27 11:57:11 字數 3991 閱讀 6102

知識點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...