Используя 'избранную' команду для печати меню в Bash

Это - высоко упрощенный история Unix и его производных. Windows не фигурирует в нем, потому что его история является чрезвычайно отдельной.

Когда-то давно операционные системы были сложными и громоздкими. Однажды в конце 1960-х, Ken Thompson, Dennis Ritchie и нескольких их коллег в AT&T Bell Labs решила записать более простую версию Multics для выполнения игр на их PDP-7, и таким образом Unix родился.

AT&T содержала права на код, и лицензии были дорогими. Многие другие компании сублицензировали Unix и продали их собственную версию. Крупные игроки включали DEC, HP, IBM, Sun. Варианты Unix добавили свои собственные расширения, часто отмечая идеи друг от друга и от академии.

Между тем, в Беркли, много академиков были недовольны ситуацией с лицензированием и решили создать версию Unix, который не включал кода AT&T-licensed. Таким образом в начале 1980-х Распределение программного обеспечения Беркли или BSD, стало свободным вариантом Unix. BSD сначала работал на Миникомпьютерах, таких как PDP-11 и VAXen.

Между тем, на Восточном побережье, Richard Stallman закатил истерику, когда он не мог получить исходный код к своему драйверу принтера. Он основал GNU (GNU не Unix) проект в 1983, намереваясь сделать свободную подобную Unix операционную систему, только лучше. После небольшого колебания ядро этой операционной системы было выбрано, чтобы быть Hurd, который собирается быть применимым любое десятилетие теперь. Много компонентов проекта GNU включены во все текущие бесплатные нельды, в особенности компилятор GCC.

Между тем, в Финляндии, Linus Torvalds пошел на разгул взламывания летом 1991 года. Когда он проснулся, он понял, что записал операционную систему для своего ПК, и он решил совместно использовать его путем помещения его на FTP-сервер в каталоге под названием Linux. Успех превысил его ожидания.

Многие люди создали дистрибутивы программного обеспечения включая ядро Linux, много программ GNU, X-оконную систему и другое бесплатное программное обеспечение. Эти дистрибутивы (Slackware, Debian, Red Hat, SUSE, хинду, Ubuntu, и т.д.) - то, что люди обычно отсылают к тому, когда они говорят “Linux”. Большинство дистрибутивов Linux состоит главным образом из free-as-in-speech программного обеспечения, хотя программное обеспечение, которое является просто free-as-in-beer, часто включается, когда никакой свободный эквивалент не существует.

Другие в настоящее время существующие нельды включают различные ветвления BSD (Вы получаете выбор FreeBSD, NetBSD и OpenBSD, при этом весь свободен, открыт и разработан через 'сеть), а также disminishing количество коммерческих вариантов, предназначенных к серверам: и AIX, HP-UX, Солярис и несколько очень младших соперников. Другой собственной основанной на Unix операционной системой является   Mac OS X, работающий Appleна рабочие столы, ноутбуки и КПК.

10
02.09.2018, 18:18
2 ответа

Ваше меню, показанное выбором, будет похоже:

1) apache
2) named
3) sendmail
Select an option and press Enter: 

В это время Вы входите "1" или "2" или "3": Вы не вводите слово.

Кроме того, select циклично выполнится, пока это не будет видеть a break команда, таким образом, Вы хотите это:

  case $opt in
        "apache")
          date
          break
          ;;
        "named")
          echo "test"
          break
          ;;
        "sendmail")
          echo "test 2"
          break
          ;;
        *) echo "invalid option";;
  esac

Если бы Вы хотели позволить пользователю вводить или номер или слово, то Вы могли записать это:

select opt in "${options[@]}"; do
  case "$opt,$REPLY" in
    apache,*|*,apache)     do_something; break ;;
    named,*|*,named)       do_something; break ;;
    sendmail,*|*,sendmail) do_something; break ;;
  esac
done

Запятая не имеет никакого синтаксического значения, она должна просто там смочь скопировать соответствие на любом переменная $REPLY (который является тем, что пользователь на самом деле ввел), или переменная $opt

11
27.01.2020, 20:01
  • 1
    select управляйте нуждается в a break, нет case. –  glenn jackman 14.09.2011, 21:09
  • 2
    Спасибо! я не понял, что это были числовые опции. Duhh! –  Sumod 15.09.2011, 13:45
  • 3
    Ха, я также программирую в C и, Вам действительно нужен a break там в каждом разделе. Однако Вам никогда не будет нужен a break в случае... esac блок в сценарии оболочки. Это, может оказаться, так легко перепутывает их. :-) –  syntaxerror 20.11.2014, 13:05
  • 4
    @syntaxerror, Вы правы, Вам не нужно break для case. Однако Вам нужен a break выйти select цикл. –  glenn jackman 20.11.2014, 14:55
  • 5
    @glenn jackman я хотел бы превратиться в это более полезный комментарий (см. затем). Таким образом, было бы замечательно при достижении соглашения об удалении комментария с 12:55. Я сделаю то же с моим, конечно. –  syntaxerror 23.11.2014, 18:20

Ваш $opt переменная будет установлена на слово опции, соответствующее числу что вводы данных пользователем. Если Вы хотите посмотреть на то, какой пользователь, на самом деле введенный, посмотрите на $REPLY.

3
27.01.2020, 20:01
  • 1
    Учитывая, что case выдерживает сравнение $opt против "апача", "названного" и "sendmail", это корректно, и ничто не должно быть изменено. –  manatwork 14.09.2011, 17:13
  • 2
    @manatwork, если OP не хочет, чтобы пользователь ввел в словах "апача", "названного" или "sendmail" вместо того, чтобы нажатие 1, 2 или 3. –  Kusalananda♦ 14.09.2011, 17:38
  • 3
    Интересный. $REPLY содержит 1/2/3, и $opt содержит apache/named/sendmail –  Peter.O 15.09.2011, 09:50
  • 4
    @fred, да, $REPLY то, что пользователь, введенный, и если это был верный номер затем $opt будет слово, соответствующее тому числу. –  Kusalananda♦ 15.09.2011, 09:53

Теги

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