簡單小範例for無限次讀取
基本無限迴圈去讀取資料, 間隔時間為sleep 1
1 2 3 4 5 6 7 |
while true do Board=$(cat /proc/localtmon); CPU=$(cat /proc/tmoninfo); echo "Board:$Board CPU:$CPU"; sleep 1; done |
變數到底是什麼意思, 稍作筆記如下
$0 $1 $2 $3 $4 $@ $# $*
引用自鳥哥:
1 2 3 4 5 6 7 8 9 |
/path/to/scriptname opt1 opt2 opt3 opt4 $0 $1 $2 $3 $4 這樣夠清楚了吧?執行的腳本檔名為 $0 這個變數,第一個接的參數就是 $1 啊~ 所以,只要我們在 script 裡面善用 $1 的話,就可以很簡單的立即下達某些指令功能了!除了這些數字的變數之外, 我們還有一些較為特殊的變數可以在 script 內使用來呼叫這些參數喔! •$# :代表後接的參數『個數』,以上表為例這裡顯示為『 4 』; •$@ :代表『 "$1" "$2" "$3" "$4" 』之意,每個變數是獨立的(用雙引號括起來); •$* :代表『 "$1 $2 $3 $4" 』,表示沒有各自獨立, 僅使用空白鍵(預設)為分隔字元。 |
如何取出執行檔名與目錄字串
$(basename ${BASH_SOURCE[0]})是什麼意思 …
取出第0個參數的方法, 有時候$0會出錯
最好的方式就是用 ${BASH_SOURCE[0]} 或 ${BASH_SOURCE}
然後前一個指令basename是啥呢? 看看介紹吧
1 2 3 4 5 6 7 |
$ basename --help Usage: basename NAME [SUFFIX] or: basename OPTION Print NAME with any leading directory components removed. Examples: basename /usr/bin/sort Output "sort". basename include/stdio.h .h Output "stdio". |
寫個小範例驗證一下
$vim tt.sh
1 2 3 4 5 |
#!/bin/bash echo ${BASH_SOURCE[0]} echo ${BASH_SOURCE} echo $(dirname ${BASH_SOURCE[0]}) echo $(basename ${BASH_SOURCE[0]}) |
執行與輸出如下:
jamie@jamie-pc:~$ ./tt.sh
./tt.sh
./tt.sh
.
tt.sh
jamie@jamie-pc:~$ ~/tt.sh
/home/jamie/tt.sh
/home/jamie/tt.sh
/home/jamie
tt.sh
jamie@jamie-pc:~$ /home/jamie/tt.sh
/home/jamie/tt.sh
/home/jamie/tt.sh
/home/jamie
tt.sh
如何轉換英語字母大小寫
1 2 3 4 5 |
#!/bin/bash function be_upper () { echo $(echo $@ | tr "[:lower:]" "[:upper:]"); } function be_lower () { echo $(echo $@ | tr "[:upper:]" "[:lower:]"); } echo "Upper:"$(be_upper "$*") echo "Lower:"$(be_lower "$*") |
執行與輸出
$ ./tt.sh abc1 def ggh
Upper:ABC1 DEF GGH
Lower:abc1 def ggh
如何用DEBUG控制echo輸出(或其他動作)
1 2 3 4 5 6 7 8 9 |
#!/bin/bash function DEBUG() { [ "$_DEBUG" == "on" ] && $@ || : } for i in {1..10} do DEBUG echo $i done |
可以在echo前面加入DEBUG關鍵字, 並且要在script前頭寫一個DEBUG()函式
而函式裡面用一變數 $_DEBUG” 作控制, 如果 _DEBUG=on 成立才執行後面指令 $@
使用方法有二:
1. 在執行指令時, 前頭加上 _DEBUG=on 即可
# _DEBUG=on ./script.sh
2. 直接在script.sh裡面, 寫 export _DEBUG=”on” 表明
export _DEBUG=”on”