shell 常用知識(shí)匯總

這里整理了一份shell常用語(yǔ)法,方便復(fù)習(xí)。

  • $(cmd)只輸出標(biāo)準(zhǔn)輸入,如果命令執(zhí)行錯(cuò)誤,則無(wú)輸出
  • $((expr))用于執(zhí)行數(shù)學(xué)運(yùn)算
  • $?返回上一條命令的執(zhí)行結(jié)果

1.輸入輸出重定向

  • 標(biāo)準(zhǔn)輸入重定向(STDIN,文件描述符為0):默認(rèn)從鍵盤輸入,也可從其他文件或命令中輸入。

  • 標(biāo)準(zhǔn)輸出重定向(STDOUT,文件描述符為1):默認(rèn)輸出到屏幕。

  • 錯(cuò)誤輸出重定向(STDERR,文件描述符為2):默認(rèn)輸出到屏幕。

  • 符號(hào) 作用 命令 < 文件 將文件作為命令的標(biāo)準(zhǔn)輸入

    • 命令 << 分界符 從標(biāo)準(zhǔn)輸入中讀入,直到遇見(jiàn)分界符才停止
    • 命令 < 文件1 > 文件2 將文件1作為命令的標(biāo)準(zhǔn)輸入并將標(biāo)準(zhǔn)輸出到文件2
  • 符號(hào) 作用 命令 > 文件 將標(biāo)準(zhǔn)輸出重定向到一個(gè)文件中(清空原有文件的數(shù)據(jù))

    • 命令 2> 文件 將錯(cuò)誤輸出重定向到一個(gè)文件中(清空原有文件的數(shù)據(jù))
    • 命令 >> 文件 將標(biāo)準(zhǔn)輸出重定向到一個(gè)文件中(追加到原有內(nèi)容的后面)
    • 命令 2>> 文件 將錯(cuò)誤輸出重定向到一個(gè)文件中(追加到原有內(nèi)容的后面)
    • 命令 >> 文件 2>&1 或 命令 &>> 文件

2.常用的轉(zhuǎn)移字符

  • 反斜杠(\):使反斜杠后面的一個(gè)變量變?yōu)閱渭兊淖址?/li>
  • 單引號(hào)(''):轉(zhuǎn)義其中所有的變量為單純的字符串。
  • 雙引號(hào)(""):保留其中的變量屬性,不進(jìn)行轉(zhuǎn)義處理。
  • 反引號(hào)(``):把其中的命令執(zhí)行后返回結(jié)果。

3.流程控制語(yǔ)句[if,else, for, while, case]:

# if/else: 
    if [[ condition ]]; then
        do some thing;
    elif [[ condition ]]; then
        do some thing;
    else
        do some thing;
    fi;
# for:
    for i in $(seq 10); do
        do some thing;
    done;   
# while:
    i=10;
    while [[ $i -gt 5 ]];do
        echo $i;
        ((i--));
    done;
# case:
    case $1 in
    start | begin)
        echo "start something"  
        ;;
    stop | end)
        echo "stop something"  
        ;;
    *)
        echo "Ignorant"  
        ;;
    esac

前臺(tái)、后臺(tái)任務(wù):

  • & 標(biāo)識(shí)將命令放入后臺(tái)執(zhí)行,不占用終端顯示。
  • jobs 能看到所有前、后臺(tái)命令。
  • ctrl + z 可以把任務(wù)轉(zhuǎn)移到后臺(tái),并且暫停執(zhí)行。
  • fg 將后臺(tái)的命令調(diào)至前臺(tái)。
  • bg 將一個(gè)后臺(tái)的命令變成繼續(xù)執(zhí)行。

經(jīng)驗(yàn)之談:

  • 在過(guò)濾的時(shí)候會(huì)用到grep, 但是如果不忽略自身腳本繼而執(zhí)行某些(刪除)命令,會(huì)把當(dāng)前腳本殺掉。
    • ps aux|grep sqlpad|grep -v grep|grep -v 0|awk '{print2}'|xargs kill -9
  • 不想在終端看到命令的輸出可以把輸出重定向到/dev/null
    • cmd > /dev/null 2>&1 &
  • 啟動(dòng)腳本是一個(gè)'全新的環(huán)境', 這里面沒(méi)有定義好的alias。環(huán)境變量,得提前在腳本中定義或給全目標(biāo)路徑。
    • 這里所謂的'全新的環(huán)境'不夠嚴(yán)謹(jǐn),其實(shí)和腳本啟動(dòng)后。執(zhí)行的shell環(huán)境有關(guān),這里沒(méi)有加載用戶的~/.bash_profile文件。
    • 具體的加載順序可以參照網(wǎng)文

單元測(cè)試:

  • shUnit2是一個(gè)為bash shell腳本設(shè)計(jì)的xUnit類型的單元測(cè)試框,參考網(wǎng)文
    • 有個(gè)demo在publish/test, 部分接口有寫單元測(cè)試

func_check_file:
-x 是否存在且可執(zhí)行
-d 路徑是否存在
-f 文件是否存在

參考網(wǎng)文:

"添加小柒老師,進(jìn)群共同學(xué)習(xí)技術(shù)"

掃描上方二維碼
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容