
У меня есть задание по предмету, и я не могу найти ничего о «благоговении»?
В задании говорится, что нужно создать скрипт с функцией «awe», который будет выводить слова «Потому что Linux — это круто!» после 3 вопросов.
Я совсем новичок во всем этом и очень хотел бы получить помощь. Я пытался awk
, но из того, что я видел в видео, которые я смотрел об этом, это не то, чего он хочет. Спасибо.
решение1
Ответ с использованием оболочки Bash:
В задании говорится, что нужно создать скрипт с функцией «awe», который будет выводить слова «Потому что Linux — это круто!» после 3 вопросов.
В задании говорится создать функцию, так что давайте посмотрим, чторуководство по Bashрассказывает нам офункции:
Функции оболочки — это способ группировать команды для последующего выполнения с использованием одного имени для группы. Они выполняются так же, как «обычная» команда. Когда имя функции оболочки используется как простое имя команды, выполняется список команд, связанных с этим именем функции. Функции оболочки выполняются в текущем контексте оболочки; для их интерпретации не создается новый процесс.
Функции объявляются с использованием следующего синтаксиса:
name () compound-command [ redirections ]
или
function name [()] compound-command [ redirections ]
Это определяет функцию оболочки с именемимя. Зарезервированное слово
function
необязательно. Еслиfunction
зарезервированное слово указано, скобки необязательны.телофункции является составной командойсоставная команда(видетьСоставные команды). Обычно эта командасписокзаключено между { и }, но может быть любой составной командой, перечисленной выше, за одним исключением: еслиfunction
зарезервированное слово используется, но скобки не указаны, фигурные скобки обязательны.составная командавыполняется всякий раз, когдаимяуказывается как имя команды.
Короче говоря, функция — это набор команд, объединенных под заданным вами именем, которое и является именем функции.
Назначение сообщает вам, как должна быть названа функция ( awe
), а также что эта функция должна делать (вывод "Потому что Linux - это круто!"). Чтобы вывести это сообщение, вы можете использовать echo
. echo
Команда, которую Bash предоставляет как встроенную оболочку, используется для вывода вstdout
(консоль). Имея эту информацию вы можете написать свою функцию:
awe(){
echo "Because Linux is Awesome!"
}
Далее в задании нужно заставить его выполниться после того, как заданы три вопроса. Для этого можно использовать команду read
, которая может принимать несколько флагов опций. Давайте посмотрим, чторуководство по bashговорит намоread
:
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name …]
Одна строка считывается из стандартного ввода или из файлового дескриптора.фд предоставленный в качестве аргумента опции
-u
, разделенный на слова, как описано выше вРазделение слов, и первое слово присваивается первомуимя, второе слово ко второмуимяи т. д. Если слов больше, чем имен, оставшиеся слова и их разделители присваиваются последнемуимя. Если из входного потока прочитано меньше слов, чем имен, оставшимся именам присваиваются пустые значения. Символы в значении переменнойIFS
используются для разбиения строки на слова с использованием тех же правил, которые оболочка использует для расширения (описано выше вРазделение слов). Символ обратной косой черты '\
' может использоваться для удаления любого специального значения для следующего прочитанного символа и для продолжения строки. Если имена не указаны, прочитанная строка присваивается переменнойREPLY
.
read
принимает несколько вариантов. В этом случае наиболее релевантны два, поскольку вы хотите задать пользователю вопрос и получить для него вводные данные. Эти варианты:
-r
→ Если задана эта опция, обратная косая черта не действует как экранирующий символ. Обратная косая черта считается частью строки. В частности, пара обратная косая черта-новая строка не может использоваться как продолжение строки.-p prompt
→ Показатьбыстрый, без завершающей новой строки, перед попыткой прочитать любой ввод. Подсказка отображается только в том случае, если ввод поступает с терминала.
Хотя это не худшая ситуация, которую стоит забыть -r
, вы почти всегда хотите включить его, чтобы предотвратить \
его использование в качестве экранирующего символа. -p
показывает пользователю подсказку. Вы можете разместить оба варианта после одного -
, поэтому вы можете написать что-то вроде этого:
read -rp "Question? " variable
Ввод пользователя был сохранен в variable
. Нет, мы хотим использовать этот ввод, включив его в предложение, которое мы выводим обратно пользователю. Чтобы расширить variable
его значение, вы ставите $
перед ним a. Это работает даже в двойных кавычках.
echo "This is a reply to the user and it contains $variable!"
Обычно это все, что вам нужно для решения этого задания. В моем примере сценария я добавил небольшой поворот, чтобы использовать if
условие для действия в зависимости от того, был ли дан ответ "да" или "нет" на последний вопрос. Итак, давайте снова посмотримчто руководство говорит нам об if
условиях:
Синтаксис команды
if
:if test-commands; then consequent-commands; [elif more-test-commands; then more-consequents;] [else alternate-consequents;] fi
Theтестовые командысписок выполняется, и если его возвращаемый статус равен нулю,последующие командысписок выполняется. Еслитестовые командывозвращает ненулевой статус, каждый
elif
список выполняется по очереди, и если его статус выхода равен нулю, соответствующийбольше-последствийвыполняется и команда завершается. Если присутствует ' ' и последняя команда в финальном предложении or имеет ненулевой статус выхода, тоelse alternate-consequents
if
elif
альтернативные последствиявыполняется. Возвращаемый статус — это статус выхода последней выполненной команды или ноль, если ни одно из условий не прошло проверку.
Я test-command
использовал в своем примере ниже [
, который является встроенным в оболочку, который проверяет условные true или false. При использовании [
необходимо передать последний аргумент ]
. =
проверяет переменные на равенство как строки.
Итак, вот пример сценария:
#!/bin/bash
# function 'awe' to output "Because Linux is Awesome!"
awe(){
echo "Because Linux is Awesome!"
}
# asking three questions
read -rp "Enter your name!: " name
echo "Well, hello then $name!"
read -rp "How old are you?: " age
echo "Being $age makes you nearly as old as I am"
read -rp "Do you like Linux?: " likes_linux
# acting on if the last input is yes or something else in which case we assume no
if [ "$likes_linux" = "yes" ];then
awe
else
echo "Why don't you like Linux?"
fi