特殊變數列表 變數
含義 $0
當前指令碼的檔名 $n
傳遞給指令碼或函式的引數。n 是乙個數字,表示第幾個引數。例如,第乙個引數是$1,第二個引數是$2。 $#
傳遞給指令碼或函式的引數個數。 $*
傳遞給指令碼或函式的所有引數。 $@
傳遞給指令碼或函式的所有引數。被雙引號(" ")包含時,與 $* 稍有不同,下面將會講到。 $?
上個命令的退出狀態,或函式的返回值。 $$
當前shell程序id。對於 shell 指令碼,就是這些指令碼所在的程序id。
字串運算子列表
運算子 說明
舉例 =
檢測兩個字串是否相等,相等返回 true。
[ $a = $b ] 返回 false。 !=
檢測兩個字串是否相等,不相等返回 true。
[ $a != $b ] 返回 true。 -z
檢測字串長度是否為0,為0返回 true。
[ -z $a ] 返回 false。 -n
檢測字串長度是否為0,不為0返回 true。
[ -z $a ] 返回 true。
str檢測字串是否為空,不為空返回 true。
[ $a ] 返回 true。
shell 中包含指令碼可以使用:
. filename
或source filename
兩種方式的效果相同,簡單起見,一般使用點號(.),但是注意點號(.)和檔名中間有一空格
檔案測試運算子列表
操作符 說明
舉例-b file
檢測檔案是否是塊裝置檔案,如果是,則返回 true。
[ -b $file ] 返回 false。
-c file
檢測檔案是否是字元裝置檔案,如果是,則返回 true。
[ -b $file ] 返回 false。
-d file
檢測檔案是否是目錄,如果是,則返回 true。
[ -d $file ] 返回 false。
-f file
檢測檔案是否是普通檔案(既不是目錄,也不是裝置檔案),如果是,則返回 true。
[ -f $file ] 返回 true。
-g file
檢測檔案是否設定了 sgid 位,如果是,則返回 true。
[ -g $file ] 返回 false。
-k file
檢測檔案是否設定了粘著位(sticky bit),如果是,則返回 true。
[ -k $file ] 返回 false。
-p file
檢測檔案是否是具名管道,如果是,則返回 true。
[ -p $file ] 返回 false。
-u file
檢測檔案是否設定了 suid 位,如果是,則返回 true。
[ -u $file ] 返回 false。
-r file
檢測檔案是否可讀,如果是,則返回 true。
[ -r $file ] 返回 true。
-w file
檢測檔案是否可寫,如果是,則返回 true。
[ -w $file ] 返回 true。
-x file
檢測檔案是否可執行,如果是,則返回 true。
[ -x $file ] 返回 true。
-s file
檢測檔案是否為空(檔案大小是否大於0),不為空返回 true。
[ -s $file ] 返回 true。
-e file
檢測檔案(包括目錄)是否存在,如果是,則返回 true。
[ -e $file ] 返回 true。
shell指令碼編碼問題
最近某個指令碼的執行經常導致編碼問題。指令碼從遠端mysql資料庫獲取影片中文名,然後再匯入本機的mysql中。發現由crontab自動執行的時候獲取的影片名稱都是亂碼,但手動執行指令碼卻正常輸出。幾天都是這個問題。今天突然想起以前也有類似問題,在終端執行 echo lang 然後在指令碼中加 ex...
設定shell視窗編碼
在windows中安裝的cmder預設的客戶端編碼為中文簡體 gbk 如果某些命令輸出的字元編碼是utf 8,就會出現中文字元亂碼的問題。此時,我們可將cmder的字元編碼改為utf 8,來解決中文亂碼的問題。有以下兩種方法。1.臨時修改cmder的字元編碼 開啟cmder,執行下面的命令即可 ch...
shell檔案內容編碼轉換
linux下有時需要對文字檔案的編碼格式進行轉換,下面是在專案中用過的一些shell命令。要想對文字內容的字元編碼進行轉換,具體引數含義 j 轉換為 jis 編碼 iso 2022 jp 預設 e 轉換為 euc 編碼 s 轉換為 shift jis 編碼 w 轉換為 utf 8 編碼 無bom l...