if [ $# != 3 ] ; then
echo "USAGE: $0 from to"
echo " e.g.: $0 ~/oucaijun/from ~/oucaijun/to"
exit 1;
fi
————————————————————————
$#代表了命令行的參數數量
位置參數 $1, $2,..., $N,$#代表了命令行的參數數量, $0代表了腳本的名字
-ne 不等於
————————————————————————
UNIX Shell -> 比較:
整數比較
- -eq
-
等於
if [ "$a" -eq "$b" ]
- -ne
-
不等於
if [ "$a" -ne "$b" ]
- -gt
-
大於
if [ "$a" -gt "$b" ]
- -ge
-
大於等於
if [ "$a" -ge "$b" ]
- -lt
-
小於
if [ "$a" -lt "$b" ]
- -le
-
小於等於
if [ "$a" -le "$b" ]
- <
-
小於(在雙括號中使用)
(("$a" < "$b"))
- <=
-
小於等於(在雙括號中使用)
(("$a" <= "$b"))
- >
-
大於(在雙括號中使用)
(("$a" > "$b"))
- >=
-
大於等於(在雙括號中使用)
(("$a" >= "$b"))
字符串比較
=
-
等於
if [ "$a" = "$b" ]
- ==
-
等於
if [ "$a" == "$b" ]
與=等價.
==比較操作符在雙中括號對和單中括號對中的行為是不同的.
1 [[ $a == z* ]] # 如果$a以"z"開頭(模式匹配)那么結果將為真 2 [[ $a == "z*" ]] # 如果$a與z*相等(就是字面意思完全一樣), 那么結果為真. 3 4 [ $a == z* ] # 文件擴展匹配(file globbing)和單詞分割有效. 5 [ "$a" == "z*" ] # 如果$a與z*相等(就是字面意思完全一樣), 那么結果為真. 6 7 # 感謝, Stephane Chazelas
- !=
-
不等號
if [ "$a" != "$b" ]
這個操作符將在[[ ... ]]結構中使用模式匹配.
- <
-
小於, 按照ASCII字符進行排序
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ]
注意"<"使用在[ ]結構中的時候需要被轉義.
- >
-
大於, 按照ASCII字符進行排序
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ]
注意">"使用在[ ]結構中的時候需要被轉義.
- -z
-
字符串為"null", 意思就是字符串長度為零
- -n
-
字符串不為"null".
當-n使用在中括號中進行條件測試的時候, 必須要把字符串用雙引號引用起來,這才是安全的行為. 如果采用了未引用的字符串來使用! -z, 甚至是在條件測試中括號中只使用未引用的字符串的話, 一般也是可以工作的, 然而, 這是一種不安全的習慣. 習慣於使用引用的測試字符串才是正路.
#!/bin/sh a=1 #if [ "$a" -eq "$1" ]; then # ok if [ "$1" -eq "$a" ] # ok #if[ "$1" -eq "$a" ] # not ok then echo "11 var1 == a" fi if [ "$1" == "$a" ]; then # ok #if [ $1 == $a ]; then # can do but not a good style #if [ $1==$a ]; then # not ok echo "22 var1 == a" fi
參考: 1. Shell腳本中判斷輸入參數個數的方法 http://www.jb51.net/article/56549.htm