Bash с нуля - снова

Как мой Путешествие по Bash продолжается, я все еще зацикливаюсь на таких нелепых вещах, как этот сценарий, от которого просто не могу осмыслить:

#!/bin/bash

if [ $1 -gt 100 ]
then
   echo "You typed a larger number"
   if (( $1 % 2 == 0 ))
   then
      echo "And it's even an even number"
fi

Недавно мне посоветовали держать ShellCheck под рукой, и я так и сделал, но он похоже, что его предложения о том, как улучшить этот скрипт, тоже не работают. Обычно, когда я пытаюсь запустить его, я всегда получаю такие ошибки, как «[:! =: ожидаемый унарный оператор», даже когда я пытаюсь процитировать $ 1 в «$ 1» ", который также рекомендуется ShellCheck. Может ли кто-нибудь мне помочь? Заранее большое спасибо!

0
задан 18 June 2021 в 12:50

1 ответ

Ваш скрипт имеет синтаксическую ошибку, в нем не хватает еще одного fi в конце. После исправления этой ошибки вы получите "ожидается унарный оператор", потому что ваше значение $1 (значение первого параметра скрипта) пустое, а первая команда if ожидает, что это значение будет непустым. Вы должны вызвать скрипт с некоторым числом в качестве параметра, например:

./script 150

Тогда вы получите ответ:

You typed a larger number
And it's even an even number

Если вы хотите, чтобы скрипт не выводил сообщения об ошибках при вызове без параметра, перед использованием параметра вы должны определить, пуст ли параметр, и что-то сделать. Например, вы можете добавить следующий код перед первой командой if:

if [ -z "$1" ]
then
   echo "Parameter required!"
   exit
fi
2
ответ дан 28 July 2021 в 11:27

Другие вопросы по тегам:

Похожие вопросы: