Что я понятия не имею, потому что «ответ» находится далеко не на первой строке. Поэтому я наткнулся на эту статью
Это не ваша проблема здесь.
Iзапустил скрипт и не получил ошибку, которую получил.Я получил сообщение об ошибке:
./test.sh: line 1: [: -eq: unary operator expected
, когда пытался скомпилировать.Определение сделано исправлено.Следующий скрипт должен работать ...
#!/bin/bash
done=0
while [ $done -eq 0 ]
do
echo -n "Would you like to create one? [y/n]: "
read answer
if [[ "$(answer)" == "y" || "$(answer)" == "Y" ]]; then
mkdir ./fsm_${newVersion}/trace
echo "Created trace folder in build $newVersion"
$done=1
elif [[ "$(answer)" == "n" || "$(answer)" == "N" ]]; then
$done=2
else
echo "Not a valid answer"
fi
done
... заметьте, что вы выполняли сравнение строк для своей переменной done, которую вы, очевидно, намеревались считать числовой.Как правило, сравнивать строки с числовой переменной - плохая форма, хотя это сработает.Вместо этого используйте -eq (оператор арифметического сравнения).(Также обратите внимание, что если бы вы сохранили этот тест, ваше равенство строк было бы несовместимым ... у вас было "=" в одном месте и "==" в другом месте ... придирчиво, но полезно быть последовательным).
Кроме того, я предлагаю двойные скобки для ваших составных условных выражений, поскольку они будут более удобочитаемыми, если у вас есть более длинные.например,
if [[($var1 -eq 0 && $var2 -eq 1) || ($var1 -eq 1 && $var2 -eq 0)]]; then
Это просто вопрос предпочтения, так как у вас есть только два условия, но это может пригодиться в будущем.
Также у вас не было скобок '{' '}' вокруг вашей новой версиипеременная.
Наконец, я бы предложил поместить строку #! / bin / bash в начало вашего скрипта.В противном случае вам решать, что делать с вашим сценарием, а это плохая идея.