Ответ с использованием оболочки Bash:

Ответ с использованием оболочки Bash:

У меня есть задание по предмету, и я не могу найти ничего о «благоговении»?

В задании говорится, что нужно создать скрипт с функцией «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-consequentsifelifальтернативные последствиявыполняется. Возвращаемый статус — это статус выхода последней выполненной команды или ноль, если ни одно из условий не прошло проверку.

Я 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

Связанный контент