整数を繰り返すとき

整数を繰り返すとき

私は初めてLinuxに触れ、本当に興味深いオンラインコースを受講しています。先生が講義と説明をあまりにも早くしてくれてテープを巻き戻してもつくことができません。ここにいる多くの人にとって、これは簡単かもしれませんが、私がしなければならないことは...

  1. スクリプト名を while.sh と指定します。
  2. ユーザーに正の整数を入力するように要求します。ユーザーが正の整数を入力すると仮定できます(入力検証は必要ありません)。
  3. whileループを使用して、0から入力整数までのすべての整数を印刷します。各整数は1行に単独で印刷する必要があり、他のものは印刷しないでください。

これを行うにはどうすればよいですか?

ベストアンサー1

ファイル名がで指定される予定なので、構文をwhile.sh使用したいと思いますsh

以下を行う必要があります。

  • 入力されたコマンドを読んでください。ほとんどのテキストユーティリティはこれを行うことができます(デフォルトで行うこと)。変数への入力を読み取る組み込みコマンドshもあります。read
  • 出力とプロンプトを作成するコマンドです。これには多くのコマンドがあります。このprintfコマンドはこれを行うことができ、ほとんどのインタプリタに組み込まれていますが、ここではいくつかを出力したいshので、ループ内でこれを複数回実行できるコマンドを使用することをお勧めします。
  • 整数演算を実行する方法です。これにはいくつかのコマンドがあります。sh言語には機能も組み込まれています。

結局のところ、このawkコマンドは上記のすべてを行い、構文を持ちますwhile()

#! /bin/sh -
awk '
  BEGIN {printf "Please enter a positive integer number: "}
  {while(i <= $0) print i++; exit}'

ここでは実際には必要はなく、sh次のように書くことができます。

#! /usr/bin/awk -f
BEGIN {printf "Please enter a positive integer number: "}
{while(i <= $0) print i++; exit}

bcは、ほぼ3つのコマンドすべてを含む別のコマンドです。 GNU実装はこれを拡張としてサポートしていますが、ユーザー入力を読み取る機能が欠けています。

#! /usr/bin/bc -q
"Please enter a prositive integer number: "
n = read()
i = 0
while (i <= n) i++
quit

シェルのwhile構成を使用してループ内で複数のコマンドを呼び出すこともできますが、これは次のとおりです。しばしば悪い習慣と見なされます。、効率が低く、コードがやや見苦しくなります(ユーザー入力を検証するには、awkシェルの内部機能(構造)よりもcase優れた機能を提供できます)。

#! /bin/sh -
printf 'Please enter a positive integer number: ' || exit
IFS= read -r number || [ -n "$number" ] || exit
i=0; while [ "$i" -le "$number" ]; do
  printf '%s\n' "$i" || exit
  i=$((i + 1))
done

また、sh最大3+2×(数字+ 2)コマンド(幸運にも[ほとんどreadprintfインタプリタに組み込まれていますsh)!以上を使用する単一のコマンド呼び出しとawk比較してくださいbc

また、一部のシステムには、seq1行に1つずつ一連の数字を出力するように特別に設計されたコマンドがありますseq 0 "$number"。シェルスクリプト(すべてのコマンドラインソルバーの前にあるシェル)は、ジョブの正しいコマンドを呼び出すことによって開始されます。これはプログラミングとは関係がないので、先生にシェルwhileループを使用するように頼むのは奇妙だと思います。

おすすめ記事