有人知道阿威是什么吗?

-9 shell shell-script

我有一个要上课的作业,却找不到任何关于“敬畏”的东西?

作业说要创建一个带有名为“awe”的函数的脚本,该函数与“因为 Linux 很棒!”这句话相呼应。3个问题后。

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

Vid*_*uth 11

使用 Bash shell 回答:

作业说要创建一个带有名为“awe”的函数的脚本,该函数与“因为 Linux 很棒!”这句话相呼应。3个问题后。

赋值说创建一个函数,所以让我们看看Bash 手册告诉我们关于函数的内容

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

使用以下语法声明函数:

name () compound-command [ redirections ]
Run Code Online (Sandbox Code Playgroud)

或者

function name [()] compound-command [ redirections ]
Run Code Online (Sandbox Code Playgroud)

这定义了一个名为name的 shell 函数。保留字function是可选的。如果提供了function保留字,则括号是可选的。该函数的主体是复合命令复合命令(请参阅复合命令)。该命令通常是一个包含在 { 和 } 之间的列表,但也可以是上面列出的任何复合命令,只有一个例外:如果使用了function保留字,但没有提供括号,则需要使用大括号。每当将name指定为命令的名称时,就会执行复合命令。

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

赋值告诉你函数应该如何命名 ( awe),以及这个函数应该做什么(输出“Because Linux is Awesome!”)。要输出该消息,您可以使用echo. 该echo命令是 Bash 内置的 shell,用于输出到stdout(控制台)。根据这些信息,您可以编写函数:

awe(){
    echo "Because Linux is Awesome!"
}
Run Code Online (Sandbox Code Playgroud)

接下来的任务是在问了三个问题后让它执行。为此,您可以使用该read命令,该命令可以接受多个选项标志。让我们看看bash 手册告诉我们什么read

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars]
    [-N nchars] [-p prompt] [-t timeout] [-u fd] [name …]
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

read -rp "Question? " variable
Run Code Online (Sandbox Code Playgroud)

用户的输入已存储在variable. 不,我们想使用该输入,将其包含在我们输出回用户的句子中。为了扩展variable它所拥有的价值,你$在它前面放了一个。这甚至在双引号内也有效。

echo "This is a reply to the user and it contains $variable!"
Run Code Online (Sandbox Code Playgroud)

通常,这就是您解决此任务所需的全部内容。在我的示例脚本中,我添加了一个小改动,以使用if条件来决定最后一个问题的回答是“是”还是“否”。所以再次让我们看看手册告诉我们关于if条件的内容

if命令的语法是:

if test-commands; then
  consequent-commands;
[elif more-test-commands; then
  more-consequents;]
[else alternate-consequents;]
fi
Run Code Online (Sandbox Code Playgroud)

执行test-commands列表,如果其返回状态为零,则执行consequent-commands列表。如果test-commands返回非零状态,elif则依次执行每个列表,如果其退出状态为零,则执行相应的more-consequents并完成命令。如果存在“ ”,并且最终or子句中的最终命令具有非零退出状态,则执行替代结果。返回状态是最后执行的命令的退出状态,如果没有条件测试为真,则为零。else alternate-consequentsifelif

test-command我在我下面的例子是使用[,这是一个shell内置其中试验条件真或假。使用时[,必须传递最后一个参数]=测试变量作为字符串是否相等。

所以,这是示例脚本:

#!/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
Run Code Online (Sandbox Code Playgroud)

  • 我想知道人们是否只是因为它在这里的存在而贬低这个答案。直接参考手册为OP和其他新用户提供了自己回答问题的方法,这对网站有好处。我认为参考 `man` 和/或 `apropos` 命令也可能有用,考虑到上下文。断断续续的例子、基本原理的解释和手册引用的摘要使这比简单的 RTFM 对学习者更有用。在我看来,这是一个很好的答案,如果可以的话,我会投票两次。 (5认同)