Вам нужны пробелы вокруг ==
. В противном случае вы проходите строку «$ Choice» == 1
, чтобы , а не сравнивать
, а не сравнивать $ Choice
на 1
. Когда
получает строку, она будет оценить значение true до тех пор, пока строка не пустая: [
[
$ foo="bar"; [ $foo ] && echo true
true
$ foo=""; [ "$foo" ] && echo true ## echoes nothing
вне теста
кронштейнов, в отсутствие пространства, переменная на самом деле назначаться = 1
. Чтобы проиллюстрировать:
$ f==3
$ echo $f
=3
$ [ 10==12 ] && echo yes
yes
, как вы можете видеть выше, f == 3
устанавливает переменную $ f
- = 3
.
Итак, в вашем , если
блок , то, что тестируется, это непустая строка, которая всегда оценивает true и , если выполняется
. Это будет работать:
if [ "$choice" == "1" ]
then
baseinstall
fi
также =
или ==
Сравнение Сравнение строки в Bash. Вы хотите арифметическое сравнение:
if [ "$choice" -eq "1" ]
then
baseinstall
fi
Использование живого компакт-диска и ремонта загрузки. https://help.ubuntu.com/community/boot-repair