Linux 检查bash shell脚本中的参数数

Linux 检查bash shell脚本中的参数数,linux,bash,arguments,Linux,Bash,Arguments,我用于检查bash shell中的参数数,如下所示: #! /bin/bash usage() { echo "Usage: $0 <you need to specify at least 1 param>" exit -1 } [ x = x$1 ] && usage #/bin/bash 用法(){ echo“用法:$0” 出口-1 } [x=x$1]&&用法 其中,如果[x=x$1]条件不满足,则执行usage。 这里,我的问题是,我从来没

我用于检查bash shell中的参数数,如下所示:

#! /bin/bash
usage() {
    echo "Usage: $0 <you need to specify at least 1 param>"
    exit -1
}
[ x = x$1 ] && usage
#/bin/bash
用法(){
echo“用法:$0”
出口-1
}
[x=x$1]&&用法
其中,如果[x=x$1]条件不满足,则执行usage。 这里,我的问题是,我从来没有真正考虑过表达式[x=x$1],它看起来很像一个条件表达式。x被算作文字吗?我们怎么能用=来比较呢。通常应该是==

有人可以在这里填补空白吗?

使用
$#
来计算参数的数量,并使用OR运算符而不是and运算符,这样只有在第一个条件失败时才能执行
usage()

#! /bin/bash
usage() {
    echo "Usage: $0 <you need to specify at least 1 param>"
    exit -1
}
[ x = $# ] || usage
#/bin/bash
用法(){
echo“用法:$0”
出口-1
}
[x=$#]||用法
使用
$#
来计算参数的数量,并使用OR运算符而不是and运算符,这样只有在第一个条件失败时才会执行
用法()

#! /bin/bash
usage() {
    echo "Usage: $0 <you need to specify at least 1 param>"
    exit -1
}
[ x = $# ] || usage
#/bin/bash
用法(){
echo“用法:$0”
出口-1
}
[x=$#]||用法

[x=y]
条件用于比较字符串。(只需一次
=

x$1
表示连接两个字符串
x
$1


因此,如果
$1
为空,
x$1
等于
x
,因此
[x=x]
将为真。

[x=y]
条件用于比较字符串。(只需一次
=

x$1
表示连接两个字符串
x
$1


因此,如果
$1
为空,
x$1
等于
x
,因此
[x=x]
将为真。

[x=x$1]
容易出错,不要使用它。改为这样做
[“$1”]

区别在于,如果
$1
包含空格或其他特殊字符,脚本将崩溃,例如:

$ a='hello world'
$ [ x = x$a ] && echo works
-bash: [: too many arguments
要解决此问题,您可以执行
[x=x“$1”]
,但
[“$1”]
较短,这有什么意义呢

[]
表达式在shell脚本中广泛使用,我建议阅读
帮助测试
[
是内置“test”的同义词,但最后一个参数必须是文本
]
,以匹配开头的
[
。在这里您可以找到
=
=
运算符之间差异的解释

最后,如果条件中的文本不是空的,则条件中的文本将计算为true。还有一些示例:

[ x ]       # true
[ abc ]     # true
[ a = a ]   # true
[ a = x ]   # false
[ '' ]      # false
[ b = '' ]  # false
常见的问题还有:

[ 0 ]       # true
[ -n ]      # true
[ -blah ]   # true
[ false ]   # true

这些都是真的,因为
0
-n
false
或任何唯一的参数,它们被视为文字字符串,因此条件的计算结果为真。

[x=x$1]
容易出错,不要使用它。改为
[“$1]”

区别在于,如果
$1
包含空格或其他特殊字符,脚本将崩溃,例如:

$ a='hello world'
$ [ x = x$a ] && echo works
-bash: [: too many arguments
要解决此问题,您可以执行
[x=x“$1”]
,但
[“$1”]
较短,这有什么意义呢

[]
表达式在shell脚本中广泛使用,我建议阅读
帮助测试
[
是“测试”内置项的同义词,但最后一个参数必须是文本
]
,以匹配开头
[
。在这里,您可以找到
=
=
运算符之间差异的解释

最后,如果条件中的文本不是空的,则条件中的文本将计算为true。还有一些示例:

[ x ]       # true
[ abc ]     # true
[ a = a ]   # true
[ a = x ]   # false
[ '' ]      # false
[ b = '' ]  # false
常见的问题还有:

[ 0 ]       # true
[ -n ]      # true
[ -blah ]   # true
[ false ]   # true

这些都是真的,因为
0
-n
false
或任何作为唯一参数的东西,它们被视为文字字符串,因此条件的计算结果为真。

哦,也许我不清楚我的问题。我的问题更可能是,[x=x$1]是什么意思?它不应该是类似于[x==x$1]的东西吗哦,也许我不清楚我的问题。我的问题更可能是,[x=x$1]是什么意思?它不应该是[x==x$1]吗?我刚刚发现[x==y]和[x=y]符号相同。我在字符串比较中发现了许多“=”的示例,但有一个是“==”的示例。因此,我在使用“==”时搜索了它,上面的页面说它用于算术比较。我刚刚发现[x==y]和[x=y]符号相同。我在字符串比较中发现了许多“=”的示例,但有一个是“==”。因此,我在使用“==”时搜索了它,上面的页面说它用于算术比较。
[x=x$1是]
是一个古老的把戏,从一个特定的shell无法处理
[“$1=”]
正确。不再需要它;对空字符串进行测试是安全的。
[x=x$1是]
是一个古老的把戏,从一个特定的shell无法处理时开始
正确。不再需要它;对空字符串进行测试是安全的。它当然更容易记住和使用它当然更容易记住和使用