Argc и Argv в Bash

Я написал следующий скрипт, который получает имя файла, а затем собирает и связывает файл. Но это не работает. В чем проблема?

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"

person Community    schedule 18.07.2017    source источник
comment
Прежде всего, вы должны изменить логику вашей конструкции if...then...else. Кроме того, вопреки соглашению C, в bash $0 не считается аргументом, поэтому EXPECTED_ARGS в вашем скрипте должен быть 1   -  person Leon    schedule 18.07.2017
comment
Я установил его на 1, но ничего не изменилось.   -  person    schedule 18.07.2017
comment
Вы также должны отменить свой оператор if ... then ... else (т.е. распечатать ошибку, когда фактическое количество аргументов не равно ожидаемому количеству аргументов, и выполнить задание в противном случае)   -  person Leon    schedule 18.07.2017
comment
-ne не равно ... вы поменяли местами условия. если [$ # -eq $ EXPECTED_ARGS] ....   -  person Zibri    schedule 23.03.2018
comment
С моей точки зрения, ища эквивалент Bash ARGC (с Google) (IE $# или ARGC=$(( $# ))), вопрос, связанный с оригиналом дубликата, ПОЛНОСТЬЮ НЕ ОТВЕЧАЕТ на это. Заставляет меня улучшить ответы здесь, но я не могу.   -  person dlamblin    schedule 05.07.2018


Ответы (1)


Хорошо, попробуй вот так

определить переменную ARGC = $ #

и вы, если заявление будет выглядеть как

если [$ ARGC -ne $ MAX_ARGS]; затем

Легенда:

-ne = не равно

-gt = больше чем

-eq = равно

person Paul afk    schedule 07.09.2017