我有一个要上课的作业,却找不到任何关于“敬畏”的东西?
作业说要创建一个带有名为“awe”的函数的脚本,该函数与“因为 Linux 很棒!”这句话相呼应。3个问题后。
我对这一切都很陌生,非常希望得到帮助。我尝试过,awk但从我在视频中看到的内容来看,这不是他想要的。谢谢。
Vid*_*uth 11
作业说要创建一个带有名为“awe”的函数的脚本,该函数与“因为 Linux 很棒!”这句话相呼应。3个问题后。
赋值说创建一个函数,所以让我们看看Bash 手册告诉我们关于函数的内容:
Shell 函数是一种将命令分组以便以后执行的方法,使用组的单个名称。它们的执行就像“常规”命令一样。当 shell 函数的名称用作简单的命令名称时,将执行与该函数名称关联的命令列表。Shell 函数在当前 Shell 上下文中执行;没有创建新的过程来解释它们。
使用以下语法声明函数:
Run Code Online (Sandbox Code Playgroud)name () compound-command [ redirections ]或者
Run Code Online (Sandbox Code Playgroud)function name [()] compound-command [ redirections ]这定义了一个名为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:
Run Code Online (Sandbox Code Playgroud)read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name …]一行是从标准输入中读取的,或者从 作为选项参数提供的文件描述符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命令的语法是:Run Code Online (Sandbox Code Playgroud)if test-commands; then consequent-commands; [elif more-test-commands; then more-consequents;] [else alternate-consequents;] fi执行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)
| 归档时间: |
|
| 查看次数: |
368 次 |
| 最近记录: |