Skip to content

Latest commit

 

History

History
194 lines (133 loc) · 13 KB

bash.md

File metadata and controls

194 lines (133 loc) · 13 KB

Bash

新手上路 {: #getting-started }

如何查看 Bash builtin 的用法?

  • man 查不到 Bash builtin 的用法,要用 help,例如 help cd

參考資料:

  • cd 而言,它是 builtin,所以用 man cd 看不到什麼說明,要用 help cd 才行;可以用 help help 查看 builtin 的說明。

Quoting ??

History ??

STDIN ??

set -e ??

List - ||, &&, &, ;

  • 3.2.3 Lists of Commands - Bash Reference Manual #ril
    • List 是比 pipeline 更大的單位 -- A list is a sequence of one or more pipelines separated by one of the operators: ;, &, &&, or ||。
    • & 會將前面的 command 非同步地執行在 subshell,而 ; 則是單純地依序執行 (sequentially),return status 是最後一個 command 的 exit status。
    • &&|| 分別稱做 AND list 與 OR list。就 command1 && command2 而言,command2 只有在 command1 的 exit status 為 zero 時才會執行,而 command1 || command2 處理方式不同,command2 只有在 command1 的 exit status 為 non-zero 才會執行。而整個 list 的 return status 是 list 中最後一個執行的 command 的 exit status。
  • bash - Confusing use of && and || operators - Unix & Linux Stack Exchange #ril
    • Shawn J. Goff: && 只有在左側的 exit status 為 zero 才會執行,而 || 相反則是左側的 exit status 為 non-zero 時才會執行。
  • bash which OR operator to use - pipe v double pipe - Stack Overflow #ril

I/O Redirection??

Shell Scripting

If ... Else

  • linux - Why should there be a space after '[' and before ']' in Bash? - Stack Overflow https://stackoverflow.com/questions/9581064/ 為什麼 if [ condition ] 的兩側一定要有空白? Johnsyweb: 因為 [ 是個 command,其實是 test 的 synonym (用 help [help test 查看用法),只是 help [ 提到 [ 的最後一個參數必須要是 ],所以才有 [ expression ] 的用法。

Files I/O 檔案存取

如何判斷目錄是否存在?

if [ -d file ]; then
    statement1
else
    statement2
fi

若是目錄不存在時才要做什麼事,用 [ expression ] || statement 也可以 (expression 不成立時才會執行 statement),例如 output/ 不存在時才建立:

[ -d output ] || mkdir output

參考資料:

目錄不存在時才建立?

Shell Scripting 跟 Shell 的關係是什麼??

Shell Expansion

如何一次展開多個 ~ ??

生產力

  • 怎麼用 alias ?? 是 Bash 的東西而非 Unix-like??

參數處理

流程控制

Process 行程管理

資料處理

HOWTO

如何執行多個 task (忽略中間發生的錯誤) ??

利用 || 右側的 command 只有在左側 command 的 exit status 為 non-zero 時才會執行。

set -e

sh -c 'echo one; exit 0' || EXIT_STATUS=$?
sh -c 'echo two; exit 2' || EXIT_STATUS=$?
sh -c 'echo three; exit 0' || EXIT_STATUS=$?

exit $EXIT_STATUS

其他

參考資料

資源:

手冊: