【问题标题】:Argc and Argv in Bash [duplicate]Bash中的Argc和Argv [重复]
【发布时间】:2017-12-22 20:17:04
【问题描述】:

我编写了以下脚本,它获取文件名,然后组装和链接文件。但它不起作用。它有什么问题?

EXPECTED_ARGS=2


if [ $# -ne $EXPECTED_ARGS ]
then
        echo "[+] Assembling with Nasm."
        nasm -f elf32 $1 -o $1.o

        echo "[+] Linking ..."
        ld $1.o -o $1

        echo "[+] Done!" 

else
        printf  "\nInvalid number of arguments, please check the inputs and try again\n"

fi;

当我在不传递任何参数的情况下运行它时,它不会显示以下错误:

printf  "\nInvalid number of arguments, please check the inputs and try again\n"

【问题讨论】:

  • 首先,您必须颠倒您的if...then...else 构造的逻辑。此外,与 C 约定相反,在 bash 中 $0 不算作参数,因此 EXPECTED_ARGS 在您的脚本中必须为 1
  • 我将它设置为 1 但没有任何改变。
  • 您还必须反转您的 if ... then ... else 语句(即,当实际参数数量不等于预期参数数量时打印错误,否则执行此工作)
  • -ne 不相等...您交换了条件。如果 [ $# -eq $EXPECTED_ARGS ] ....
  • 从我的角度来看,寻找 Bash 的 ARGC 等效项(使用 Google)(即 $#ARGC=$(( $# ))),作为“重复”的原始链接的问题完全没有回答.让我想在这里改进答案,但我做不到。

标签: linux bash shell argv argc


【解决方案1】:

好的,这样试试

定义一个变量 ARGC=$#

你的 if 语句看起来像

如果 [ $ARGC -ne $MAX_ARGS ];那么

传说:

-ne = 不等于

-gt = 大于

-eq = 等于

【讨论】:

    猜你喜欢
    • 2020-10-12
    • 2013-09-08
    • 2011-07-08
    • 2014-10-09
    • 2011-10-20
    • 2017-02-14
    • 2011-04-15
    • 2011-04-23
    相关资源
    最近更新 更多