Naf*_*aly 663 bash parameter-passing command-line-arguments
如果不满足所需的参数计数,我希望我的Bash脚本能够打印错误消息.
我尝试了以下代码:
#!/bin/bash
echo Script name: $0
echo $# arguments
if [$# -ne 1];
then echo "illegal number of parameters"
fi
Run Code Online (Sandbox Code Playgroud)
由于某些未知原因,我遇到以下错误:
test: line 4: [2: command not found
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
kon*_*box 1000
就像任何其他简单命令一样,[ ... ]
或者test
在其参数之间需要空格.
if [ "$#" -ne 1 ]; then
echo "Illegal number of parameters"
fi
Run Code Online (Sandbox Code Playgroud)
要么
if test "$#" -ne 1; then
echo "Illegal number of parameters"
fi
Run Code Online (Sandbox Code Playgroud)
在Bash中,更喜欢使用,[[ ]]
因为它不会对其变量进行单词拆分和路径名扩展,除非它是表达式的一部分,否则引用可能不是必需的.
[[ $# -ne 1 ]]
Run Code Online (Sandbox Code Playgroud)
它还有一些其他功能,如不带引号的条件分组,模式匹配(扩展模式匹配extglob
)和正则表达式匹配.
以下示例检查参数是否有效.它允许一个或两个参数.
[[ ($# -eq 1 || ($# -eq 2 && $2 == <glob pattern>)) && $1 =~ <regex pattern> ]]
Run Code Online (Sandbox Code Playgroud)
对于纯算术表达式,使用(( ))
一些仍可能会更好,但它们仍然可能在[[ ]]
与它的算术运算符等-eq
,-ne
,-lt
,-le
,-gt
,或-ge
通过将表达为一个字符串参数:
A=1
[[ 'A + 1' -eq 2 ]] && echo true ## Prints true.
Run Code Online (Sandbox Code Playgroud)
如果您需要将其与其他功能结合使用,这应该会有所帮助[[ ]]
.
Ale*_*-A. 67
如果你正在处理数字,那么使用算术表达式可能是个好主意.
if (( $# != 1 )); then
echo "Illegal number of parameters"
fi
Run Code Online (Sandbox Code Playgroud)
jhv*_*ras 38
On []:!=,=,== ...是字符串比较运算符,-eq,-gt ...是算术二进制运算符.
我会用:
if [ "$#" != "1" ]; then
Run Code Online (Sandbox Code Playgroud)
要么:
if [ $# -eq 1 ]; then
Run Code Online (Sandbox Code Playgroud)
Pat*_*Pat 33
如果您只对缺少某个特定参数的情况感兴趣,参数替换很棒:
#!/bin/bash
# usage-message.sh
: ${1?"Usage: $0 ARGUMENT"}
# Script exits here if command-line parameter absent,
#+ with following error message.
# usage-message.sh: 1: Usage: usage-message.sh ARGUMENT
Run Code Online (Sandbox Code Playgroud)
Dwi*_*cer 13
可以使用以下方法完成简单的单线工作:
[ "$#" -ne 1 ] && ( usage && exit 1 ) || main
Run Code Online (Sandbox Code Playgroud)
这分解为:
想一想:
查看此 bash速查表,它可以提供很多帮助。
要检查传入的参数的长度,请使用 "$#"
要使用传入的参数数组,请使用 "$@"
检查长度并进行迭代的示例为:
myFunc() {
if [[ "$#" -gt 0 ]]; then
for arg in "$@"; do
echo $arg
done
fi
}
myFunc "$@"
Run Code Online (Sandbox Code Playgroud)
这篇文章对我有所帮助,但对我和我的处境却缺少一些东西。希望这对某人有帮助。
归档时间: |
|
查看次数: |
713108 次 |
最近记录: |