Bash中的Argc和Argv [重复]
Posted
技术标签:
【中文标题】Bash中的Argc和Argv [重复]【英文标题】:Argc and Argv in Bash [duplicate] 【发布时间】: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=$(( $# ))
),作为“重复”的原始链接的问题完全没有回答.让我想在这里改进答案,但我做不到。
【参考方案1】:
好的,这样试试
定义一个变量 ARGC=$#
你的 if 语句看起来像
如果 [ $ARGC -ne $MAX_ARGS ];那么
传说:
-ne = 不等于
-gt = 大于
-eq = 等于
【讨论】:
以上是关于Bash中的Argc和Argv [重复]的主要内容,如果未能解决你的问题,请参考以下文章