整数を繰り返すとき

整数を繰り返すとき

私は初めて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ループを使用するように頼むのは奇妙だと思います。

答え2

を使用するには、vi while.sh次のスクリプトを使用して新しいファイルを作成します。

#!/bin/bash

COUNTER=0

echo "Enter a integer positive number: "
read NUMBER

echo "Numbers from 0 to $NUMBER: "
while [ $NUMBER -ge $COUNTER ]; do
  echo $COUNTER
  ((COUNTER++))
done

次に、を使用してchmod +x while.sh実行権限を付与します。呼び出しスクリプトを使用して./while.sh整数を入力し、Enterキーを押します(検証なし)。次を返します。

user@Notebook:/tmp$ ./while.sh 
Enter a integer positive number: 
5
Numbers from 0 to 5: 
0
1
2
3
4
5

manより良い理解のためには、while、read、bash変数、および比較に関するドキュメントを読むことが重要です。これを行う方法はいくつかあります。これは最も簡単なものです。

[編集] @user218863さん、ストアの登録情報に関するご意見にお答えし、以下をお試しください。

#!/bin/bash -

echo "Enter items separated by a space:"
IFS= read -r LIST

IFS=' ' # split on space only
set -o noglob # disable glob
for item in $LIST; do
   printf '%s\n' "$item" || break
done >> shopping_list
echo "List:"
cat shopping_list

これにより、入力された各単語とcatループファイルを含むshopping_listという名前のファイルが作成されます。回答が役に立った場合は、採用をお願いします:)

関連情報