sh v.s source
如果直接用 sh 執行 script,基本上就是開一個子程序去執行 script。所以父程序要獲得子程序的結果,通常都是靠著 export 解決 scope 的不同。若是使用 source 去執行 script,則是直接用本身程序去執行,所以本身與腳本享有共同 scope。更多請參考 : 鳥哥私房菜。基本的 variable & operator
基本上 shell 的語法網路上有很多相關資料,這邊我想紀錄的是那些對於菜鳥不怎麼直觀的 variable & operator。而且其實我認為 shell 的精華就是在這些 variable & operator。- variable
#!/bin/sh # 執行 : sh variable.sh a b c echo $0 # script 本身 echo $1 $2 $3 # 執行 script 時, 後面跟著的 arguments echo $# # arguments 之總數 echo $* # 全部 arguments, 這個例子就是 a b c echo $@ # 全部 arguments, 這個例子就是 a b c ($* $@ 應該有所不同, 不過我試不出來...) echo $? # 上一個程式最後回傳值 (exit 0) echo $$ # 此 shell 的 pid echo $! # 此 shell 最後執行的 background process 的 pid exit 0
- operator
#!/bin/sh # 執行 : sh operator.sh 20 10 # 此格式為固定的, ``, operator 前後要有空格 # expr 不會檢查 $1 跟 $2, 所以沒有的話會出錯 # 即使加了 "" 也會被判定 null, 等於 non-integer 也是錯 val=`expr $1 + $2` # 相加 val=`expr $1 - $2` # 相減 val=`expr $1 \* $2` # 相乘 (*須加反斜線) val=`expr $1 / $2` # 相除 val=`expr $1 % $2` # 取餘數 # ==, !=, >, <, >=, <= if [ $1 = $2 ]; then val="equal" fi if [ $1 != $2 ]; then val="non-equal" fi if [ $1 -eq $2 ]; then val="equal" fi if [ $1 -ne $2 ]; then val="non-equal" fi if [ $1 -gt $2 ]; then val="greater than" fi if [ $1 -lt $2 ]; then val="less than" fi if [ $1 -ge $2 ]; then val="greater or equal" fi if [ $1 -le $2 ]; then val="less or equal" fi exit 0
- 更多 operator
#!/bin/sh # 執行 : sh operator2.sh 字串1 字串2 ... # 參數判斷時, 最好加上 "", 否則有高機率失效, 並出現 unary operator expected 等錯誤. if [ -z "$1" ]; then echo "there's no argument" fi if [ ! -z "$1" ]; then echo "there's at least one argument (!-z)" fi if [ -n "$1" ]; then echo "there's at least one argument (-n)" fi if [ "$1" ]; then echo "#1 argument is exist" fi # boolean operator -a = and, -o = or if [ "$1" -a "$2" ]; then echo "#1 and #2 arguments are both exist" fi if [ "$1" -o "$2" ]; then echo "there's at least one argument" fi exit 0
參考資料 :
下一篇 :
0 意見:
張貼留言