【发布时间】: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