
我有一個課堂作業要交,卻找不到任何關於「敬畏」的內容?
作業要求創建一個帶有名為“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