19

В процессе написания сценария оболочки я столкнулся с проблемой следующего оператора if/else, который находится где-то посередине сценария:

if [ $act -eq "add" ]
then
    read - "add or update: " $comm
    git commit -m "$comm $file"
else
    git commit -m "$act $file"
fi

Возвращаемая ошибка:

./gitup: line 13: [: add: integer expression expected

а затем приступает к остальной части сценария. Как можно, чтобы сегмент if оценивал / сравнивал переменную со строковым вводом, а не с целым числом; при использовании "!= "среди нескольких других вещей, которые я пробовал.

2 ответа2

32

Что-то вроде этого:

act="add"
if [[ $act = "add" ]]
then
    echo good
else
    echo not good
fi

-eq для сравнения чисел, использовать = для сравнения строк

3

Этот метод также будет работать. Очень похоже на ответ @ Guru, но устраняет необходимость в двойных квадратных скобках.

if [ "$act" == "add" ]
then
echo "Good!"
      else
      echo "Not good!"
fi

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .