В настоящее время я пишу свой третий скрипт оболочки, и у меня возникла проблема. Это мой сценарий:
#!/bin/bash
echo "choose one of the following options : \
1) display all current users \
2) list all files \
3) show calendar \
4) exit script"
while read
do
case in
1) who;;
2) ls -a;;
3) cal;;
4) exit;;
esac
done
когда я пытаюсь запустить скрипт, он говорит это:
line2 : unexpected EOF while looking for matching '"'
line14 : syntax error: unexpected end of file.
Что я делаю неправильно?
shell
shell-script
Swifty124
источник
источник
Ответы:
Проблема в том, что в вашем
case
утверждении отсутствует тема - переменная, которую он должен оценивать. Следовательно, вы, вероятно, хотите что-то вроде этого:Здесь
case
используется переменная по умолчанию,$REPLY
котораяread
заполняется, когда ей не дано никаких имен переменных (см.help read
Подробности).Также обратите внимание на изменения:
printf
используется для отображения подсказки в каждом раунде (и не добавляет новую строку),cat
используется для печати инструкций в несколько строк, чтобы они не переносились и их было легче читать.источник
Давайте не будем забывать
select
:источник
Давайте сначала попробуем для одного случая. Я буду использовать
read -p
для чтения пользовательского ввода в переменную сopt
последующим оператором case, как показано ниже.Вышеприведенный скрипт работает нормально, и теперь, я думаю, вам нужно, чтобы он был в цикле, чтобы вы могли читать пользовательский ввод, пока пользователь не нажмет опцию 4.
Итак, мы можем сделать это с помощью
while
цикла, как показано ниже. Я установил переменнуюopt
с начальным значением равным 0. Теперь я выполняю итерации вwhile
цикле, покаopt
переменная имеет значение 0 (поэтому я сбрасываюopt
переменную как 0 в концеcase
оператора).источник
Я бы лично поставил «время» в начале кода. Если затем вы последуете за ним с помощью символа
:
, он позволит вам зацикливаться столько раз, сколько вы пожелаете. Вот как бы я это написал.затем продолжайте вопросы и заканчивайте
источник