私は初めてLinuxに触れ、本当に興味深いオンラインコースを受講しています。先生が講義と説明をあまりにも早くしてくれてテープを巻き戻してもつくことができません。ここにいる多くの人にとって、これは簡単かもしれませんが、私がしなければならないことは...
- スクリプト名を while.sh と指定します。
- ユーザーに正の整数を入力するように要求します。ユーザーが正の整数を入力すると仮定できます(入力検証は必要ありません)。
- 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)コマンド(幸運にも[
ほとんどread
のprintf
インタプリタに組み込まれていますsh
)!以上を使用する単一のコマンド呼び出しとawk
比較してくださいbc
。
また、一部のシステムには、seq
1行に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という名前のファイルが作成されます。回答が役に立った場合は、採用をお願いします:)