我有一个课堂作业要交,却找不到任何有关“敬畏”的内容?
作业要求创建一个带有名为“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
. echo
Bash 作为内置 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-consequents
if
elif
替代后果被执行。返回状态是最后执行的命令的退出状态,如果没有条件测试为真,则返回零。
我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