gpt4 book ai didi

bash - 检查传递给 Bash 脚本的参数数量

转载 作者:行者123 更新时间:2023-11-29 08:36:51 24 4
gpt4 key购买 nike

如果未满足所需的参数计数,我希望我的 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

我做错了什么?

最佳答案

就像任何其他简单命令一样,[ ... ]test 需要在其参数之间使用空格。

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.

如果您还需要将它与 [[ ]] 的其他功能结合使用,那应该会有所帮助。

请注意,[[ ]](( )) 是与 if 具有相同解析级别的关键字casewhilefor

也为 Dave建议,错误消息最好发送到 stderr,这样在重定向 stdout 时它们就不会被包含在内:

echo "Illegal number of parameters" >&2

退出脚本

当传递给它的参数无效时,让脚本退出也是合乎逻辑的。这已在 comments 中提出通过 ekangas但是有人编辑了这个答案,让它以 -1 作为返回值,所以我不妨做对。

-1 虽然被 Bash 接受为 exit 的参数,但没有明确记录并且不适合用作常见建议。 64 也是最正式的值,因为它是在 sysexits.h 中用 #define EX_USAGE 64/* command line usage error */ 定义的。 ls 等大多数工具也会在无效参数上返回 2。我也曾经在我的脚本中返回 2 但最近我不再真正关心,而是在所有错误中简单地使用 1 。但我们只将 2 放在这里,因为它是最常见的并且可能不是特定于操作系统的。

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

引用资料

关于bash - 检查传递给 Bash 脚本的参数数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18568706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com