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=
#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