【收獲】shell編程中的幾個(gè)知識(shí)點(diǎn)

shell很強(qiáng)大,shell很直接,shell很抽象

eval()

在.sh代碼中可以直接寫(xiě)命令。但在執(zhí)行過(guò)程中出錯(cuò)時(shí),欲將出錯(cuò)的命令(比如下面這句)自己手動(dòng)在command line執(zhí)行一次,就得打開(kāi)文件,找到那個(gè)命令,copy&paste到command line,執(zhí)行。

...
grep -e 'pattern' -r some/path
...

這有點(diǎn)煩。所以,我傾向于將所執(zhí)行的關(guān)鍵命令echo出來(lái),以在出錯(cuò)時(shí),即刻從console copy出來(lái)執(zhí)行。那就需要eval()了。即:先將命令存成一個(gè)變量,然后就可以eval()該變量來(lái)執(zhí)行命令(同時(shí)也可以echo出來(lái))。如下:

...
cmd="grep -e 'pattern' -r some/path"
echo $cmd // 程序穩(wěn)定了可以把這行注釋掉
eval($cmd)
...

$()

此方法可以將本應(yīng)輸出到stdout的內(nèi)容輸出到變量,以為后續(xù)程序所用

result=$(echo "hello")
// 此時(shí)result內(nèi)容即為"hello"

這個(gè)例子太簡(jiǎn)單,看起來(lái)$()沒(méi)什么用,但在實(shí)際中很有用。比如:你要檢查某個(gè)命令的輸出內(nèi)容中是否含有某個(gè)關(guān)鍵字。

result=$(grep -o -e 'pattern' -r some/path)
if [ $result = 'keyword'; ] then
   // ok, found
else
   // not found
fi

記?。?strong>輸出到stdout只能給人眼看,輸出到變量,才能被程序使用

2>&1

有時(shí),你需要將shell程序執(zhí)行輸出的log寫(xiě)入文件(以備后續(xù)排查問(wèn)題),你應(yīng)該知道這樣寫(xiě):

sh some/shell.sh > path/to/log

但這會(huì)漏掉STDERR,而他們是你定位bug的重要線索,可不能丟掉。所以,下面的寫(xiě)法才是正解:

sh some/shell.sh > path/to/log 2>&1

>> vs. >

下面寫(xiě)法為“追加”(即不清空已有內(nèi)容)

sh some/shell.sh >> path/to/log

下面寫(xiě)法則是先清空,再寫(xiě)

sh some/shell.sh > path/to/log

綜述

跟其他高級(jí)腳本語(yǔ)言相比(比如python),shell編程的優(yōu)勢(shì)在于:

  1. 無(wú)需安裝解釋器
  2. 所用命令絕大部分是我們?cè)赾ommand line天天用的,不生分
    可以說(shuō),門(mén)檻比較低。作為程序猿,應(yīng)該學(xué)一下子。
最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • linux資料總章2.1 1.0寫(xiě)的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無(wú)法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,232評(píng)論 2 33
  • 為何叫做 shell ? shell prompt(PS1) 與 Carriage Return(CR) 的關(guān)系?...
    Zero___閱讀 3,324評(píng)論 3 49
  • 本文全面系統(tǒng)地介紹了shell腳本調(diào)試技術(shù),包括使用echo, tee, trap等命令輸出關(guān)鍵信息,跟蹤變量的值...
    liuzg0734閱讀 1,001評(píng)論 0 14
  • 背景(Background) 使用哪種 Shell(Which Shell to Use) Bash是唯一被允許執(zhí)...
    haw_haw閱讀 2,768評(píng)論 1 4
  • 概述 首先,咱們來(lái)了解一下,什么是Shell。操作系統(tǒng)內(nèi)核給我們提供了各種接口,同時(shí)也提供了各種用戶(hù)層的庫(kù),理論上...
    keysaim閱讀 1,524評(píng)論 0 0

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