我想我的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

我做错了什么?


当前回答

一个简单的一行工作可以使用:

[ "$#" -ne 1 ] && ( usage && exit 1 ) || main

这可以分解为:

测试bash变量参数$#不等于1的大小(子命令的数量) 如果为true,则调用usage()函数并以状态1退出 否则调用main()函数

注意事项:

Usage()可以简单的回显"$0:params" Main可以是一个很长的脚本

其他回答

On[]: !=, =, ==…是字符串比较操作符,-eq, -gt…都是算术二进制。

我会用:

if [ "$#" != "1" ]; then

Or:

if [ $# -eq 1 ]; then

看看这个bash备考表,它可以帮助很多。

要检查传入的参数的长度,可以使用"$#"

要使用传入的参数数组,可以使用"$@"

一个检查长度和迭代的例子是:

myFunc() {
  if [[ "$#" -gt 0 ]]; then
    for arg in "$@"; do
      echo $arg
    done
  fi
}

myFunc "$@"

这篇文章帮助了我,但对我和我的情况来说,它遗漏了一些东西。希望这能帮助到一些人。

一个简单的一行工作可以使用:

[ "$#" -ne 1 ] && ( usage && exit 1 ) || main

这可以分解为:

测试bash变量参数$#不等于1的大小(子命令的数量) 如果为true,则调用usage()函数并以状态1退出 否则调用main()函数

注意事项:

Usage()可以简单的回显"$0:params" Main可以是一个很长的脚本

你应该在测试条件之间添加空格:

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

我希望这能有所帮助。

如果你在处理数字,使用算术表达式可能是个好主意。

if (( $# != 1 )); then
    >&2 echo "Illegal number of parameters"
fi

>&2用于将错误消息写入stderr。