GNU/Linux >> Linux の 問題 >  >> Linux

Bash for ループの例

シェル スクリプトでは、特定の条件が発生するまでステートメントまたはステートメントのグループを繰り返し実行したい場合がよくあります。さらに、特定のリスト内の各要素に対して一連のステートメントを実行したい場合があります。シェルは、これらの状況に対応するために、for、while、および until の 3 つのループ構造を提供します。

for ループを使用すると、値のリストを指定できます。リスト内の値ごとにステートメントのグループが実行されます。

ループ構文の場合

シェルの for ループは、単語 (文字列) のリストを引数として受け取ります。リスト内の単語数によって、for ループ内のステートメントが実行される回数が決まります。 for ループの構文は次のとおりです。

for variable in element1 element2 element3 
do
	commands 
done

ここで:

  • 変数 :任意の変数名です。
  • 要素 (argument_list) :単語、文字列、または数字の任意のリストにすることができ、リテラルにすることも、シェル コマンドまたはシェル コマンド ライン メタ文字を使用して生成することもできます。
  • コマンド :コマンドは、任意のオペレーティング システム コマンド、ユーザー プログラム、シェル スクリプト、またはリストを返す (生成する) シェル ステートメントにすることができます。

変数 var の値は、最初のループでリストの最初の単語に設定されます。 2 回目のループでは、その値がリストの 2 番目の単語に設定されます。 var が引数リストから各値を順番に取得し、残りの引数がなくなると、ループは終了します。

for ループの引数リスト

for ループの引数リストは、単語の任意のリストにすることができます 、文字列 、または数字 .次のいずれかの方法 (または方法の組み合わせ) を使用して、引数リストを生成します。

  • 明示的なリストを使用する
  • 変数の内容を使用する
  • コマンドライン引数を使用する
  • コマンド置換を使用
  • コマンド置換でファイル名を使用する

例 1 :明示的なリストを使用して引数を指定する for ループ

for ループの引数がリストされている場合、それらは明示的なリストと呼ばれます。明示的なリストは、引数リストの最も単純な形式です。ループは、リスト要素ごとに 1 回実行されます。次の例は、要素の明示的なリストを使用した for ループです:

#!/bin/bash
for fruit in apple orange banana peach kiwi 
do
    echo "Value of fruit is: $fruit"
done

この for ループの出力は次のとおりです:

Value of fruit is: apple 
Value of fruit is: orange 
Value of fruit is: banana 
Value of fruit is: peach 
Value of fruit is: kiwi

例 2 :変数の内容を使用して引数を指定する for ループ

引数が変数にあり、ステートメントが実行されると、変数の内容が置き換えられます。次の例では、プロンプトで入力されたテキストが変数 INPUT の値になります。この変数は、for コンストラクトの引数リストを表します。したがって、INPUT のテキストは、空白に基づいて単語またはトークンに分割されます。

$ cat ex1.sh 
#!/bin/bash
# Script name: ex1.sh
echo "Enter some text: \c" 
read INPUT
for var in $INPUT 
do
	echo "var contains: $var"
done
$ ./ex1.sh
Enter some text: I like the Bash shell. 
var contains: I
var contains: like
var contains: the
var contains: Korn
var contains: shell.

例 3 :コマンドライン引数を使用して引数を指定する for ループ

次の例では、コマンド ラインに入力されたテキストが for 構文の引数リストになります。したがって、コマンド ライン テキストは、空白に基づいて単語またはトークンに分割されます。

$ cat ex2.sh
#!/bin/bash
# Script name: ex2.sh
for var in $* 
do
	echo "command line contains: $var"
done
$ ./ex2.sh I am The Geek.
command line contains: I
command line contains: am
command line contains: The
command line contains: Geek.

例 4 :コマンド置換を使用して引数を指定する for ループ

Bash シェルでのコマンド置換の構文は次のとおりです:

for var in `cmd_sub`

次の例では、cat コマンドの出力を引数リストとして使用しています。

$ cat fruit1 
apple 
orange 
banana 
peach
kiwi
$ cat ex4.sh 
#!/bin/bash
# Script name: ex4.sh
for var in `cat fruit2` 
do
	echo "var contains: $var"
done
$ ./ex4.sh
var contains: Apple 
var contains: Orange 
var contains: Banana 
var contains: Peach 
var contains: Kiwi

リストを含むファイルが次の形式の場合、for ループの結果はどうなりますか。

$ cat fruit3
Apple Orange Banana Peach Kiwi
$ cat ex5.sh 
#!/bin/bash
# Script name: ex5.sh
for var in `cat fruit3` 
do
	echo "$var"
done
$ ./ex5.sh
Apple 
Orange 
Banana 
Peach 
Kiwi

上記の例では、結果は変わりません。 IFS 変数は任意の空白であるため、キャリッジ リターンとスペースまたはタブの両方でファイル内の各フィールドを区切ります。

例 5 :コマンド置換でファイル名を使用して引数を指定する for ループ

一部のコマンドは、出力としてファイル名とディレクトリ名を提供します。次の例では、シェルはコマンド ls /etc/p*(/etc/passwd/etc/profile など) の出力を for ループの引数リストとして置き換えます。

$ cat ex7.sh 
#!/bin/bash
# Script name: ex7.sh
for var in `ls /etc/p*`
do
	print "var contains: $var"
done
# ./x.sh 
var contains: /etc/passwd
var contains: /etc/passwd-
var contains: /etc/printcap
var contains: /etc/profile
....
Bash if ループの例 (if then fi、if then elif fi、if then else fi)


Linux
  1. BashForループガイドと例

  2. Bash Forループを並列化しますか?

  3. バッシュ‘?

  1. Bash の For ループと While ループの例

  2. ループの維持 – Bash For、While、Until ループの例

  3. ネストされた for ループ

  1. Bashでループを作成する方法

  2. Linuxスクリプト:Bashでのwhileループの3つのハウツー

  3. Linux シェル スクリプト用の 12 の Bash for ループの例