检查传递给Bash脚本的参数数

我想我的BASH脚本打印一个错误消息,如果所需的参数计数不符合。

我试了下面的代码:

#!/bin/bash
echo Script name: $0
echo $# arguments 
if [$# -ne 1]; 
    then echo "illegal number of parameters"
fi

由于一些未知的原因,我有以下错误:

test: line 4: [2: command not found

我究竟做错了什么? (我是新的bash)

就像任何其他简单的命令,[…]或测试需要它的参数之间的空格。

if [ "$#" -ne 1 ]; then
    echo "Illegal number of parameters"
fi

要么

if test "$#" -ne 1; then
    echo "Illegal number of parameters"
fi

在Bash中,更喜欢使用[[]],因为它不会对其变量进行分词和路径名扩展,引用可能不是必需的,除非它是表达式的一部分。

[[ $# -ne 1 ]]

它还有一些其他功能,如无引号条件分组,模式匹配(与extglob的扩展模式匹配)和正则表达式匹配。

以下示例检查参数是否有效。它允许单个参数或两个。

[[ ($# -eq 1 || ($# -eq 2 && $2 == <glob pattern>)) && $1 =~ <regex pattern> ]]

对于纯算术表达式,使用(())可能仍然更好,但是它们仍然可能在[[]]中使用算术运算符,如-eq,-ne,-lt,-le,-gt或-ge通过将表达式放置为单个字符串参数:

A=1
[[ 'A + 1' -eq 2 ]] && echo true  ## Prints true.

如果你需要将它与[[]]的其他功能结合使用,这应该是有帮助的。

参考文献:

> Bash Conditional Expressions
> Conditional Constructs
> Pattern Matching
> Word Splitting
> Filename Expansion (prev. Pathname Expansion)

相关文章
相关标签/搜索