Bashシェルを使用して応答します。

Bashシェルを使用して応答します。

授業課題が締め切られていますが、「畏敬の念」の内容が見つかりませんか?

課題を実行するには、「3つの質問の後、Linuxは素晴らしいからです!」をエコーする「awe」という関数を含むスクリプトを書く必要があります。

私はこれらすべてについて非常に慣れておらず、本当に助けたいと思います。努力しましたが、awk私が見た映像を見ると、彼が望むものではありませんでした。ありがとうございます。

ベストアンサー1

Bashシェルを使用して応答します。

課題を実行するには、「3つの質問の後、Linuxは素晴らしいからです!」をエコーする「awe」という関数を含むスクリプトを書く必要があります。

課題には関数を生成するように指示されているので、関数が何であるかを見てみましょう。バッシュマニュアル私たちに教えてください機能:

シェル関数は、グループの単一名を使用して後で実行できるようにコマンドをグループ化する方法です。これは「一般」コマンドのように実行されます。シェル関数の名前を単純なコマンド名として使用すると、その関数名に関連付けられたコマンドのリストが実行されます。シェル機能は現在シェルのコンテキストで実行され、それを解釈するための新しいプロセスは作成されません。

関数を宣言するには、次の構文を使用します。

name () compound-command [ redirections ]

または

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

これは以下のシェル関数を定義します。名前。予約語はfunctionオプションです。function予約語が指定されている場合、括弧はオプションです。これこの関数の機能は複合コマンドです複合コマンド(望むより複合コマンド)。コマンドは通常リスト{と}の間に含まれていますが、上記の複合コマンドのいずれかです。ただし、1つの例外はfunction予約語が使用され、括弧が指定されていない場合は中括弧が必要です。複合コマンドいつでも名前コマンドの名前で指定されます。

簡単に言えば、関数は、ユーザーが指定した特定の名前(関数名など)で囲まれた一連のコマンドです。

この割り当ては、関数の名前を指定する方法(awe)と、関数が実行する必要がある操作(「Because Linux is Awesome!」出力)を示します。メッセージを出力するには、組み込みシェルが出力コマンドを提供するため、.Bashを使用できますechoechostdout(快適)。この情報を使用して関数を作成できます。

awe(){
    echo "Because Linux is Awesome!"
}

課題の次のステップは、3つの質問を受けた後に課題を実行することです。これを行うには、read複数のオプションフラグを受け入れるコマンドを使用できます。それが何であるか見てみましょうバッシュマニュアル私たちに教えてください~についてread:

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars]
    [-N nchars] [-p prompt] [-t timeout] [-u fd] [name …]

標準入力またはファイル記述子から1行を読むFD-u上記のように単語で区切られ、optionsの引数として提供されます。噴射、最初の単語が最初の単語に割り当てられます。名前、第2ワードから第2ワードへ名前、等。名前よりも単語が多い場合、残りの単語と中間区切り文字は最後の単語に割り当てられます。名前。入力ストリームから名前より少ない単語を読み取る場合、残りの名前にはヌル値が割り当てられます。変数値の文字は、IFSシェルが拡張に使用するのと同じ規則を使用して行を単語に分割するために使用されます(上記)。噴射)。バックスラッシュ文字 " \"を使用すると、次の文字の読み取りと行の連続の特別な意味を削除できます。名前が指定されていない場合は、読み取った行が変数に割り当てられますREPLY

read複数のオプションを受け入れます。この場合、ユーザーに質問して意見を得たいと思うので、2つが最も関連性があります。オプションは次のとおりです。

  • -r→このオプションを指定すると、バックスラッシュはエスケープ文字として機能しません。バックスラッシュは行の一部と見なされます。特に、バックスラッシュ - 改行ペアは行連続で使用できません。
  • -p prompt→見せる早く、入力を読み取ろうとする前に末尾の改行なし。プロンプトは、入力が端末から来る場合にのみ表示されます。

忘れてしまう最も簡単な状況ではありませんが、エスケープ文字として機能しないように、-rほとんど常に含めたいと思います。ユーザーにプロンプ​​トを表示します。 1つのオプションの後に2つのオプションを入れることができるので、次のように書くことができます。\-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

これテストコマンドリストが実行され、戻り状態が0の場合後続のコマンドリストが実行されます。もしテストコマンドゼロ以外の状態を返します。各elifリストの終了ステータスが 0 の場合、そのリストが実行されます。その他の結果実行され、コマンドが完了します。 ''が存在し、最後または句の最後のコマンドがゼロ以外の終了状態を持つ場合else alternate-consequentsifelif代替結果処刑される。戻り状態は、最後に実行されたコマンドの終了状態、または真としてテストされる条件がない場合は0です。

test-command以下の例で私が使用しているのは、[条件が真か偽かをテストする組み込みシェルです。使用時に[最後のパラメータを渡す必要があります]=変数が文字列と等しいかどうかをテストします。

サンプルスクリプトは次のとおりです。

#!/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

おすすめ記事