猿问

检查传递给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

我究竟做错了什么?


GCT1015
浏览 830回答 3
3回答

慕标琳琳

就像任何其他简单命令一样,[ ... ]或者test其参数之间需要空格。if [ "$#" -ne 1 ]; then&nbsp; &nbsp; echo "Illegal number of parameters"fi要么if test "$#" -ne 1; then&nbsp; &nbsp; 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&nbsp; ## Prints true.如果您还需要将其与其他功能结合使用,那将很有帮助[[ ]]。退出脚本在将无效参数传递给脚本时使脚本退出也是合乎逻辑的。这已经提出的意见通过ekangas但有人编辑这个答案与把它-1作为返回值,所以我还不如做是正确的。-1尽管没有被Bash接受为Bash的参数,但exit没有明确记录,也没有权利用作常见建议。 64也是最正式的值,因为它是在sysexits.hwith中定义的#define EX_USAGE 64 /* command line usage error */。大多数类似的工具ls也会返回2无效的参数。我也曾经返回2过自己的脚本,但是最近我不再真正在意它,只使用1了所有错误。但让我们放在2这里,因为它是最常见的,并且可能不是特定于操作系统的。if [[ $# -ne 1 ]]; then&nbsp; &nbsp; echo "Illegal number of parameters"&nbsp; &nbsp; exit 2fi

慕侠2389804

如果要处理数字,最好使用算术表达式。if (( $# != 1 )); then&nbsp; &nbsp; echo "Illegal number of parameters"fi

长风秋雁

在[]上:!=,=,== ...是字符串比较运算符,-eq,-gt ...是算术二进制运算符。我会用:if [ "$#" != "1" ]; then要么:if [ $# -eq 1 ]; then
随时随地看视频慕课网APP
我要回答