使用 Bash shell 回答:

使用 Bash shell 回答:

我有一个课堂作业要交,却找不到任何有关“敬畏”的内容?

作业要求创建一个带有名为“awe”的函数的脚本,该函数回显“因为 Linux 太棒了!” 3个问题后。

我对这一切都很陌生,非常希望得到帮助。我尝试过,awk但从我在观看的视频中看到的情况来看,这不是他想要的。谢谢。

答案1

使用 Bash shell 回答:

作业要求创建一个带有名为“awe”的函数的脚本,该函数回显“因为 Linux 太棒了!” 3个问题后。

作业说要创建一个函数,所以让我们看看是什么Bash 手册告诉我们关于功能

Shell 函数是一种对命令进行分组以便稍后使用组的单个名称执行的方法。它们的执行方式就像“常规”命令一样。当 shell 函数的名称用作简单命令名称时,将执行与该函数名称关联的命令列表。 Shell 函数在当前 shell 上下文中执行;没有创建新的流程来解释它们。

使用以下语法声明函数:

name () compound-command [ redirections ]

或者

function name [()] compound-command [ redirections ]

这定义了一个名为的 shell 函数姓名。保留字function是可选的。如果function提供了保留字,则括号是可选的。这身体该函数的功能是复合命令复合命令(看复合命令)。该命令通常是列表括在 { 和 } 之间,但可以是上面列出的任何复合命令,但有一个例外:如果function使用保留字,但未提供括号,则需要大括号。复合命令每当姓名被指定为命令的名称。

简而言之,函数是捆绑在您提供的给定名称(即函数的名称)下的一组命令。

该作业告诉您该函数应如何命名 ( awe),以及该函数应做什么(输出“Because Linux is Awesome!”)。要输出该消息,您可以使用echo. echoBash 作为内置 shell 提供的命令用于输出到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 …]

从标准输入或文件描述符读取一行FD 作为选项的参数提供-u,分成单词,如上面所述分词,第一个单词被分配给第一个姓名,第二个词到第二个词姓名, 等等。如果单词数多于名称,则剩余的单词及其中间分隔符将分配给最后一个姓名。如果从输入流中读取的单词少于名称,则其余名称将分配为空值。变量值中的字符IFS用于将行拆分为单词,使用的规则与 shell 用于扩展的规则相同(如上所述)分词)。反斜杠字符“ \”可用于删除读取的下一个字符和行继续的任何特殊含义。如果未提供名称,则将读取的行分配给变量REPLY

read接受多个选项。在这种情况下,两个是最相关的,因为您想向用户询问问题并获取他们的输入。这些选项是:

  • -r→ 如果给出此选项,反斜杠不会充当转义字符。反斜杠被认为是该行的一部分。特别是,反斜杠-换行对不能用作行延续。
  • -p prompt→ 显示迅速的,在尝试读取任何输入之前不带尾随换行符。仅当输入来自终端时才会显示提示。

虽然这不是最容易忘记的情况-r,但您几乎总是希望将其包括在内,以防止\充当转义角色。-p向用户显示提示。您可以将两个选项放在一个选项之后-,因此您可以编写如下内容:

read -rp "Question? " variable

用户的输入已存储在variable.不,我们想使用该输入,将其包含在我们输出回用户的句子中。要扩展variable它所包含的值,您可以$在它前面加上一个。即使在双引号内也是如此。

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

测试命令list 被执行,如果其返回状态为零,则后续命令列表被执行。如果测试命令返回非零状态,每个elif列表依次执行,如果其退出状态为零,则对应的更多后果被执行并且命令完成。如果存在 ' ',并且最后一个or子句中的最后一个命令具有非零退出状态,则else alternate-consequentsifelif替代后果被执行。返回状态是最后执行的命令的退出状态,如果没有条件测试为真,则返回零。

test-command在下面的示例中使用的是[,它是一个内置的 shell,用于测试条件 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

相关内容