Intereting Posts
В bash вывод данных из одной командной строки в другую в другую команду Как выполнить команду случайным образом в течение заданного интервала времени? Защищенные паролем zip-архивы открываются без пароля как вставить несколько файлов вместе, используя одно пространство в качестве разделителя Как связать команду с двойным нажатием клавиши (цепочкой ключей) в Openbox? Конфигурационный файл Piping для genkernel Документация Upstart для CentOS 6 Почему скорость моего вентилятора постоянна в Fedora? Переписать исходный IP-адрес в протоколах TCP с помощью iptables Предотвращение вращения внешнего USB-накопителя во время приостановки в ОЗУ Как поместить значение команд netcat echo pipe в переменную Использование basename для расширения расширений файла и поиска файлов с тем же именем Различные UID / GID при использовании USB-диска формата ext4 с другим компьютером Выбор планировщика ввода-вывода на внешних дисках Почему bash даже анализирует / запускает материал, помещенный в переменную окружения?

Как установить несколько значений в одну и ту же переменную в UNIX?

Я пытаюсь, чтобы сценарий дал мне результат нескольких слов и вариантов слов. Я попробовал вставить -o для переменной, цитируя слова, объединяя их. Слова для каждого varname – это указанные слова, которые я хочу получить для меня. Есть ли способ исправить это, или каждая переменная должна быть задана индивидуально? Например, varname1 = even varname2 = Even varname3 = EVEN и т. Д.

#!/bin/bash varname1=even -o Even -o EVEN varrname2=odd -o Odd -o ODD varname3=zero -o Zero -o ZERO varname4=negative -o Negative -o NEGATIVE # Ask the user for one of four select words echo "Type one of the following words:" echo "even, odd, zero, negative" read varword if [[ ("$varword" = $varname1 ) || ("$varword" = $varname2 ) || ("$varword" = $varname3 ) || ("$varword" = $varname4 ) ]] then echo "The approved word you have selected is $varword, great work! " else echo "The unapproved word you have selected is $varword, Please try again." fi 

 echo "Type one of the following words:" echo "even, odd, zero, negative" while :; do read varword varword="${varword,,}" #downcase it case "$varword" in even|odd|zero|negative) echo "The approved word you have selected is $varword, great work! "; break;; *) echo "The unapproved word you have selected is $varword, Please try again.";; esac done 

Способ хранения нескольких значений в одной переменной был бы массивом. Вот документация о том, как использовать переменные массива в bash.

Тем не менее, мне кажется, что вам нужно нечувствительное к регистру сопоставление. Это может быть достигнуто с помощью grep -iq . i сообщает grep, чтобы он не учитывал регистр, и q сообщает grep, что он должен возвращать только true или false. Кроме того, вы можете использовать оператор \| в предложении grep, чтобы соответствовать нескольким словам. Наконец, вы используете обозначение herestring <<<, чтобы передать переменную прямо в grep. Это значительно упрощает ваш скрипт:

 #!/bin/bash # Ask the user for one of four select words echo "Type one of the following words:" echo "even, odd, zero, negative" read varword if grep -iq "even\|odd\|zero\|negative" <<< "$varword" then echo "The approved word you have selected is $varword, great work! " else echo "The unapproved word you have selected is $varword, Please try again." fi