shell 常用命令回顧1

最近在梳理知識,整理一下shell。

一、 ?基本語法

1.1 注釋

輸出幫助性文字 (EOF為邊界區(qū)分字符串隨意定義)

cat <<EOF

? ? ? ? ? ?幫助性文字區(qū)域

EOF

以#開頭的句子表示注釋?

Usage 示例

if [ $# -lt 3 ]; then

# 如果少于三個參數則顯示使用的信息,然后退出。

echo "Usage: `basename $0`arg1 arg2 arg3" >&2

exit 1

fi

1.2 特殊變量

變量 ? ? ? ? ? ? ? 含義

$0 ? ? ? ? ? ? ? ? 包含當前 腳本全路徑的特殊變量

$1 -$9 ? ? ? ? ? ?位置參數1-9

${10} ? ? ? ? ? ? ?位置參數10

$# ? ? ? ? ? ? ? ? ?位置參數的個數

"$*"? ? ? ? ? ? ? ? 所有位置參數(作為單個字符串,被雙引號引住)

"$@"? ? ? ? ? ? ? 所有位置參數都分別被雙引號引住

${#*} ? ? ? ? ? ? ? ?傳遞到腳本中的命令行參數的個數

${#*} ? ? ? ? ? ? ? 傳遞到腳本中的命令行參數的個數

$?? ? ? ? ? ? ? ? ? 前一個命令執(zhí)行后的退出狀態(tài)返回值

$$ ? ? ? ? ? ? ? ? ? 當前腳本進程的PID

$- ? ? ? ? ? ? ? ? ? ?傳遞到腳本中的標識

$_ ? ? ? ? ? ? ? ? ? 之前命令的最后一個參數

$! ? ? ? ? ? ? ? ? ? 運行在后臺的最后一個作業(yè)的進程ID(PID)。

注意點:linux shell 中這兩個$* $@區(qū)別

相同點:都是引用所有參數

不同點:只在雙引號中體現(xiàn)出來

假設你的腳本運行時你寫了三個參數 分別存儲在$1 $2 $3中

則"$*" 等價于 “$1 $2 $3"? ---》傳遞了一個參數

而“$@" 等價于 "$1"? "$2"? "$3"? ---》傳遞了三個參數

1.3 變量基礎知識

變量基礎

1.4測試操作

1.4.1算術比較操作符

-eq(等于) -ne(不等于) -lt或<(小于) ?-le或<=(小于等于) -gt或>(大于) -ge(大于等于)

1.4.2字符串比較操作符

= ,==,!=,<,>,-z(字符串為空),-n(字符串不為空)

1.4.3參數替換和擴展

${ : }帶冒號的表達式

${var:-DEF} ? ? ? ? 若var沒被聲明或值為null, 整個參數替換表達式為DEF

${var:=DEF} ? ? ? ?若var沒被聲明或值為null, 整個參數替換表達式為DEF,且var的值為DEF

${var:+OTHER} ? ? ? ? 如果var被設置了, 整個參數替換表達值為OTHER, 否則為null字符串

${var:?ERR_MSG} ? ? ? 如果var沒被設置, 那就打印$ERR_MSG

表達式 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?含義

${var_DEFAULT} ? ? ? ? ? ? ? ? ? ? ? 如果var沒被聲明, 就以$DEFAULT作為其值 *

${var=DEFAULT} ? ? ? ? ? ? ? ? ? ? ? 如果var沒被聲明, 就以$DEFAULT作為其值 *

${var+OTHER} ? ? ? ? ? ? ? ? ? ? ? ? ? 如果var聲明了, 其值就是$OTHER, 否則為null字符串

${var?ERR_MSG} ? ? ? ? ? ? ? ? ? ?如果var沒被聲明, 那就打印$ERR_MSG*

${! }帶!的表達式

${!varprefix*}? ${!varprefix@} ??將帶有前綴varprefix的參數名打印出來

${!arg[*]} ?打印arg數據組的下標

${ }帶正則匹配的表達式

${var#word} ? ?#最短匹配 ? ?

${var##word} ? ?##最長匹配

從頭開始掃描word,將匹配word正則表達式的字符過慮掉

${var%word} ? ?%最短匹配

${var%%word} ? %%最長匹配

從尾開始掃描word,將匹配word正則表達式的字符過濾掉

1.5 常用的命令

1.5.1標準輸入/輸出/錯誤

0——stdin(標準輸入)

1——stdout(標準輸出)

2——stderr(標準錯誤)

<輸入重定向 ? ?—— ?將<右側信息做為左側的輸入信息

>輸出重定向 ?—— ?將>左側信息輸出至右側文件中

/dev/null 無底洞

“2>/dev/null” 代表忽略掉錯誤提示信息?

>/dev/null 2>&1 標準輸出和標準錯誤都重定向到/dev/null

2>&1>/dev/null ?標準錯誤打印到屏幕,而標準輸出不打印到屏幕

&>/dev/null 通通重定向到/dev/null

1.5.2 常用命令

獲取文件名和路徑

basename?path ? ? ?從path中分離出文件名

示例 echo "Usage:`basename $0` give me a file"

dirname path ? ??返回文件所在路徑

script option file ? ?在當前會話中輸入此命令,退出會話時,將輸入記錄下并附加到指定文件的末尾

替換

tr [options]? [source-char-list]? ? ? ? [replace-char-list]? ? ? <? ? filename

將replace-char-list的值替換source-char-list中相應位置中的值,并輸出到屏幕中,filename文件不改變內容

[replace-char-list]專用的設定

[char*] ?重復指定的字符到source-char-list相同長度為止

[char*rep]將char重復rep次數

source-char-list > replace-char-list時,source多出來的字符都會和replace中最后一個字符相對應

source-char-list < replace-char-list時,replace中多余的部分被拋棄。

[source-char-list]專用的設定

-s 有連續(xù)的source-char-list里的字符時,縮減為1個。

查找與替換

find

grep ?查找文本

sed ? 查找與替換 ??

注意sed是以行對輸入進行處理;處理的不是原文件而是原文件的拷貝

1.6正則表達式

基礎正則表達式BRE

擴展正則表達式ERE

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容