基本語法

Shebang

#!/usr/bin/env bash

變量賦值

= 號兩邊唔可以有空格。

name=foo

雙引號

可以解釋變量。

name=foo
echo "hello, $name" # hello, foo
echo "hello, \$\$"  # hello, $$
echo "hello, \"\""  # hello, ""

單引號

唔解釋變量,只有單引號係特殊字符。

name=foo
echo 'hello, $name' # hello, $name
echo 'hello, $$'    # hello, $$
echo 'hello, ""'    # hello, ""

要輸出單引號,需要先關閉單引號。

echo 'I'\''m fine'  # I'm fine

命令替換

反單號$() 兩種用法。

result=`date`
result=$(date)

推薦使用 $(),可讀性更好,更多例子如下:

echo "dir is: $(pwd)"
count=$(ls $(pwd) | wc -l)

喺呢度 ls 冇使用 -l 選項,但 count 嘅值係 4,原因喺呢度。

輸出重定向

標準輸出重定向 >,新建/覆蓋文件。

cmd > file

追加輸出重定向 >>

cmd >> file

標準錯誤重定向 2>,新建/覆蓋文件。

cmd 2> file

標準輸出同錯誤重定向到唔同文件。

cmd > foo.log 2> bar.log

標準輸出同錯誤重定向到同一文件。

ls 404 > foobar.log 2>&1

輸入重定向

常用方式,使用 < 符號。

echo "a b c" > foo
wc < foo
1 3 6

內聯重定向,Inline Input Redirection。

wc << FOO
apple
banana
cat
FOO
3       3      17

FOO 為自定義標記,用於多行輸入。

EXPR 命令

反人類嘅數學運算指令,+ 號兩邊嘅空格唔可以少。

expr 2 + 5

* 號係通配符,仲要轉義。

expr 2 \* 5

只有整除,唔支持浮點數。

expr 24 / 10

方括號

可以使用 [] 執行數學運算。

var1=$[1+5*2]
var2=$[2*(3+2)]

BC 計算器

精確數學運算計算器,全稱 Basic/Bench Calculator。

交互模式

bc
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
4*2.5
10.0
quit

-q 選項唔會打印上面嗰串英文歡迎語。

bc -q

浮點數

可以直接使用浮點數計算。

2.5*5
12.5

除法會用到 scale 變量,默認值為 0,表示整除。

scale=2
10/3

表示保留 2 位小數,scale 變量僅對除法有效

管道方式

foo=$(echo "scale=2; 10/3" | bc)

內聯輸入重定向

var1=10.24

foo=$(bc << EOF
scale=2
a=2
$var1/a
EOF
)

EXIT 命令

腳本嘅默認退出碼係 0,表示正常退出,可以使用 exit 改變。

exit 5

退出碼嘅範圍係 0-255,取模(%256)。