Linux 检查bash shell脚本中的参数数
我用于检查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。 这里,我的问题是,我从来没
#! /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无法处理时开始
正确。不再需要它;对空字符串进行测试是安全的。它当然更容易记住和使用它当然更容易记住和使用