shell 函式與內建變數

2022-09-16 01:30:15 字數 4231 閱讀 9714

$# 傳遞到指令碼的引數個數

$* 以乙個單字串顯示所有向指令碼傳遞的引數

$$ 指令碼執行的當前程序id號

$! 後台執行的最後乙個程序的id號

$@ 與$*相同,但是使用時加引號,並在引號中返回每個引數。

$- 顯示shell使用的當前選項,與set命令功能相同。

$? 顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。

$_ 顯示傳參的最後乙個引數

command > file 將輸出重定向到 file。

command < file 將輸入重定向到 file。

command >> file 將輸出以追加的方式重定向到 file。

n > file 將檔案描述符為 n 的檔案重定向到 file。

n >> file 將檔案描述符為 n 的檔案以追加的方式重定向到 file。

n >& m 將輸出檔案 m 和 n 合併。

n <& m 將輸入檔案 m 和 n 合併。

<< tag 將開始標記 tag 和結束標記 tag 之間的內容作為輸入。

$ command > /dev/null

/dev/null 是乙個特殊的檔案,寫入到它的內容都會被丟棄;如果嘗試從該檔案讀取內容,那麼什麼也讀不到。但是 /dev/null 檔案非常有用,將命令的輸出重定向到它,會起到"禁止輸出"的效果。

如果希望遮蔽 stdout 和 $ command > /dev/null 2>&1

$0 腳 本名字

$1 位置引數 #1

$2 - $9 位置引數 #2 - #9

$ 位置引數 #10

$# 位置引數的個數

"$*" 所有的位置引數(作為單個字串) *

"$@" 所有的位置引數(每個都作為獨立的字串)

$ 傳遞到指令碼中的命令列引數的個數

$ 傳遞到指令碼中的命令列引數的個數

$? 返回值

$$ 指令碼的程序id(pid)

$- 傳遞到指令碼中的標誌(使用set)

$_ 之前命令的最後乙個引數

$! 執行在後台的最後乙個作業的程序id(pid)

-eq    等於

=       等於

==     等於

-ne   不等於

!=     不等於

-lt     小於

\<     小於 (ascii) *

-le    小於等於

-gt    大於

\>    大於 (ascii) *

-ge     大於等於

-z    字串為空

-n    字串不為空

>     大於

>=   大於等於

<   小於

<=   小於等於

-e   檔案是否存在

-s   檔案大小不為0

-f   是乙個標準檔案

-d   是乙個目錄

-r   檔案具有讀許可權

-w   檔案具有寫許可權

-x   檔案具有執行許可權

-h   檔案是乙個符號鏈結

-l   檔案是乙個符號鏈結

-b   檔案是乙個塊裝置

-c   檔案是乙個字元裝置

-g   設定了sgid標記

-p   檔案是乙個管道

-u   設定了suid標記

-s   檔案是乙個socket

-k   設定了"貼上位"

-t   檔案與乙個終端相關聯

-n   從這個檔案最後一次被讀取之後, 它被修改過

-o   這個檔案的宿主是你

-g   檔案的組id與你所屬的組相同

f1 -nt f2 檔案f1比檔案f2新 *

f1 -ot f2 檔案f1比檔案f2舊 *

f1 -ef f2 檔案f1和檔案f2都是同乙個檔案的硬鏈結 *

! "非" (反轉上邊的測試結果)

表示式 含義

$ 變數var的 值, 與$var相同

$ 如果var沒 有被宣告, 那麼就以$default作為其值 *

$ 如果var沒 有被宣告, 或者其值為空, 那麼就以$default作為其值 *

$ 如果var沒 有被宣告, 那麼就以$default作為其值 *

$ 如果var沒 有被宣告, 或者其值為空, 那麼就以$default作為其值 *

$ 如果var聲 明了, 那麼其值就是$other, 否則就為null字串

$ 如 果var被設定了, 那麼其值就是$other, 否則就為null字串

$ 如果var沒 被宣告, 那麼就列印$err_msg *

$ 如果var沒 被設定, 那麼就列印$err_msg *

$ 匹配之前所有以varprefix開頭進行宣告的變數

$ 匹配之前所有以varprefix開頭進行宣告的變數

$ $string的 長度

$ 在$string中, 從位置$position開始提取子串

$ 在$string中, 從位置$position開始提取長度為$length的子串

$ 從 變數$string的開頭, 刪除最短匹配$substring的子串

$ 從 變數$string的開頭, 刪除最長匹配$substring的子串

$ 從 變數$string的結尾, 刪除最短匹配$substring的子串

$ 從 變數$string的結尾, 刪除最長匹配$substring的子串

$ 使用$replacement, 來代替第乙個匹配的$substring

$ 使 用$replacement, 代替所有匹配的$substring

$ 如 果$string的字首匹配$substring, 那麼就用$replacement來代替匹配到的$substring

$ 如果$string的字尾匹配$substring, 那麼就用$replacement來代替匹配到的$substring

expr match "$string" '$substring' 匹配$string開頭的$substring* 的長度

expr "$string" : '$substring' 匹 配$string開頭的$substring* 的長度

expr index "$string" $substring 在$string中匹配到的$substring的第乙個字元出現的位置

expr substr $string $position $length 在$string中 從位置$position開始提取長度為$length的子串

expr match "$string" '\($substring\)' 從$string的 開頭位置提取$substring*

expr "$string" : '\($substring\)' 從$string的 開頭位置提取$substring*

expr match "$string" '.*\($substring\)' 從$string的 結尾提取$substring*

expr "$string" : '.*\($substring\)' 從$string的 結尾提取$substring*

if [ condition ] 測 試結構

if [[ condition ]] 擴 展的測試結構

array[1]=element1 數 組初始化

[a-z] 正 則表示式的字元範圍

$ 引數替換

$ 間 接變數引用

**塊大 括號擴充套件

( command1; command2 ) 子shell中 執行的命令組

array=(element1 element2 element3) 陣列初始化

result=$(command) 在 子shell中執行命令, 並將結果賦值給變數

>(command) 進 程替換

<(command) 進 程替換

(( var = 78 )) 整型運算

var=$(( 20 + 5 )) 整型運算, 並將結果賦值給變數

"$variable" " 弱"引用 'string' "強"引用

result=`command` 在 子shell中執行命令, 並將結果賦值給變數

shell 函式與內建變數

傳遞到指令碼的引數個數 以乙個單字串顯示所有向指令碼傳遞的引數 指令碼執行的當前程序id號 後台執行的最後乙個程序的id號 與 相同,但是使用時加引號,並在引號中返回每個引數。顯示shell使用的當前選項,與set命令功能相同。顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。顯示傳參的...

shell內建變數

shell內部變數 shell 顯示當前系統用的shell bash 顯示bash路徑 bash subshell 提示當前subshell的層次 bash version 顯示bash版本 bash versinfo n 顯示bash安裝資訊的乙個6元素陣列,與 bash version 很像 d...

shell內建變數

特殊的shell變數 變數含義 0指令碼名 1 9 位置引數1 9 位置引數10 引數的個數 所有位置引數,加上引號後表示當做乙個字串 所有的位置引數,加上引號無影響,表示當做單個字串 獲取執行上乙個指令的執行狀態返回值 0為成功,非零為失敗 獲取當前執行shell的程序號 獲取上乙個在後台工作的程...