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