除了以文件形式保存在/usr/bin下面的命令,shell腳本中還可以使用shell本身自帶的命令,即內置命令
1、:命令
它不做任何處理,并且永遠將0作為退出狀態碼,也被稱為空命令(null command),由于空命令返回的退出狀態碼永遠為0,所以它也可以像下面這樣用于編寫無限循環的控制結構。因此true命令和:命令除了名稱不一樣,其余都是一樣的。
while : ←-----(本行及以下3行)使用了空命令的無限循環 do 處理內容 done
2、echo/printf
echo命令比較簡單不做過多介紹
▼echo命令的選項有-n、-e和-E。-n選項用于設置不讓腳本輸出行尾的換行符。其實準確來說,echo命令會在參數后面加上一個換行符并將其輸出到標準輸出中。但是,如果使用了-n選項,echo命令就不會在行尾添加換行符了。
▼printf命令和echo命令不同,不會在輸出的行尾添加換行符。如果想輸出換行符,需要在格式字符串中顯式地添加 。另外,echo命令的-e選項中支持的轉義字符也可以在printf中使用。唯一的例外是在輸出8進制的ASCII碼字符時,echo命令使用的是?nnn,而printf不需要前面的0,寫成 nn就可以了。
3、command命令和builtin命令
函數的優先級高于可執行文,在這種情況下,要想執行優先級較低的內置命令或者可執行文件,可以使用內置命令command。command命令的使用方法為“command命令名”,使用它就可以只在內置命令和可執行文件中查找并執行指定的命令。
這種情況下,就可以使用command命令或者builtin命令設置執行命令的優先順序。
4、type命令
type命令用于判斷指定的命令的類型。該命令可以輸出參數中命令的類型,即別名、保留字、函數、內置命令、可執行文件中的任意一個
▼使用type命令顯示別名的詳細信息
$ alias ll='ls -l' $ type ll ll 是 `ls -l' 的別名
▼使用type命令顯示函數的詳細信息
$ hello() { echo 'Hello, world!'; } ←----- 定義 hello 函數 $ type hello hello 是函數 hello () { ←----- 函數體的代碼 echo 'Hello, world!' }
▼將不存在的命令作為參數會報錯
$ type xxx -bash: type: xxx: 未找到
這時,type命令的退出狀態碼為1。反過來,如果命令存在于那幾種類型之中,那么退出狀態碼為0
5、set命令
▼第1個功能是顯示當前shell中的所有變量。如果在執行set命令時沒有指定任何參數,那么該命令就會輸出當前shell中設置的變量及其值的列表,以及函數名和函數體的列表。
$ set BASH=/bin/bash BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() BASH_LINENO=() BASH_SOURCE=() ……以下省略……
▼也可以用來顯示函數信息像type
▼使用set -o命令顯示所有選項的狀態
$ set -o allexport off braceexpand on emacs on errexit off ……以下省略……
▼使用set命令覆蓋位置參數的值
#!/bin/bash echo "$1, $2, $3, $4" set 111 222 333 echo "$1, $2, $3, $4" 運行: $ ./set_parameter.sh aaa bbb ccc ddd aaa, bbb, ccc, ddd 111, 222, 333, ←----- set 命令修改了位置參數的內容
6、unset
unset命令用于刪除shell中的變量。使用方法為“unset變量名,刪以后為空字符串
$ name=miyake $ echo "name = $name" name = miyake $ unset name $ echo "name = $name" name =
標記為readonly的變量想刪也刪不掉
7、input
read命令用于從標準輸入讀取一行數據,其使用方法如下。
#!/bin/bash echo 'delete file?' read input ←--------- 從標準輸入讀取 1 行數據并賦值給變量 input if [[ $input == yes ]]; then echo 'DELETE' else echo 'CANCEL' fi
▼根據鍵盤的輸入執行不同的處理
$ ./read_input.sh delete file? yes ←----- 用戶的輸入 DELETE
▼將標準輸入的內容逐行輸出到標準輸出
#!/bin/bash while read line ←----------- 標準輸入的 1 行內容被不斷地賦值給變量 line do printf '%s ' "$line" done
注意事項:read命令會將解析為轉義字符。因此后面即使是IFS所包含的字符,也不能實現單詞分割的功能。特別是,如果在行尾,那么換行符也會被忽略,這一行和下一行會被當成一行讀取。要想禁止這一功能,可以使用-r選項。該選項可以讓符號不再具有特殊的含義,即使出現在行尾,這一行也會和下一行保持獨立,不會連到一起。
8、wait命令
wait命令用于等待在后臺運行的進程的結束。在以后臺的方式運行比較耗時的處理時,如果想等待所有處理結束,就可以使用wait命令
#!/bin/bash ./task1.sh & ./task2.sh & wait echo finish
9、eval
eval命令可以將參數指定的字符串當作shell的命令行解析并執行
例如eval ls~
ls ~命令會被執行。這和直接在腳本中寫入ls ~是一樣的
-
ASCII
+關注
關注
5文章
172瀏覽量
35641 -
函數
+關注
關注
3文章
4367瀏覽量
64105 -
Shell腳本
+關注
關注
0文章
36瀏覽量
8168
原文標題:shell腳本基礎(六)內置命令
文章出處:【微信號:FPGA學姐,微信公眾號:FPGA學姐】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
腳本shell語言的相關資料推薦
shell腳本基礎知識
Linux shell 腳本詳解

評論