「シェルスクリプトの基礎 - 繰り返し文」の版間の差分
(ページの作成:「== 概要 == 繰り返し文は、変数にリストで指定した値を順番に代入し、その度にdoからdoneまでの処理を実行し、<br> リストの値…」) |
|||
35行目: | 35行目: | ||
echo $file | echo $file | ||
done | done | ||
</source> | |||
<br> | <br> | ||
# 出力 | # 出力 | ||
53行目: | 54行目: | ||
</source> | </source> | ||
<br> | <br> | ||
===== seqコマンドの使用 ===== | ===== seqコマンドの使用 ===== | ||
seqコマンドは、指定した開始の数値から終わりの数値までを表示するというコマンドで、繰り返す回数を指定することができる。<br> | seqコマンドは、指定した開始の数値から終わりの数値までを表示するというコマンドで、繰り返す回数を指定することができる。<br> |
2020年2月23日 (日) 23:31時点における版
概要
繰り返し文は、変数にリストで指定した値を順番に代入し、その度にdoからdoneまでの処理を実行し、
リストの値を全てを代入し処理が完了したら繰り返しは終了となる。
シェルスクリプトの例
変数iに1から5までの数字を指定して、変数に代入された値をechoで表示させるというサンプルコードを以下に記述する。
#!/bin/bash
for i in 1 2 3 4 5
do
echo $i
done
# 出力 1 2 3 4 5
リストの指定
リストの指定方法を以下に記載する。
コマンドの実行結果の使用
リスト部分には、コマンドの実行結果を値として使用でき、その場合は、コマンドをバッククォート(`)で囲む必要がある。
#!/bin/bash
for file in `ls /var/log/messages*`
do
echo $file
done
# 出力 /var/log/messages /var/log/messages-20170618 /var/log/messages-20170626 /var/log/messages-20170702 /var/log/messages-20170710
また、bashの場合は$()も使用できる。
#!/bin/bash
for file in $(ls /var/log/messages*)
do
echo $file
done
seqコマンドの使用
seqコマンドは、指定した開始の数値から終わりの数値までを表示するというコマンドで、繰り返す回数を指定することができる。
例えば、1から5までをリストとして指定する場合は、seq 1 5と指定する。
また、開始が1からの場合は、開始の数値を省略することもできる。
seq 1 5 または seq 5 または seq 1 1 5
seqコマンドを使用して、1から5までを範囲指定して、ファイルを作成するというスクリプトを記述する。
file_1からfile_5までのファイルが作成される。
#!/bin/bash
for data in `seq 5`
do
touch file_$data
done
また、wオプションを使用して、ゼロパディングすることもできる。
# 01から10までを出力する seq -w 1 10
ブレーズ展開
bashの場合、ブレーズ展開機能を使用してリストを指定することもできる。
ブレーズ展開は、{開始..最後}といった形式で指定することで、簡単に範囲を指定することができる。
例えば、{1..5}で1から5を指定する場合、以下のように記述する。
#!/bin/bash
for i in {1..5}
do
echo $i
done
算術式の使用
bashの場合、以下のように、1から5までを指定することもできる。
#!/bin/bash
for ((i=1; i<6; i++))
do
echo $i
done
ファイルの読み込み
事前にリストに読み込ませるファイルを作成しておき、catコマンド等でファイルの中身を読み込むという方法ある。
list.txtファイルを事前に作成して、catコマンドでファイルの中身を読み込む。
#!/bin/bash
for i in `cat list.txt`
do
echo $i
done
コマンドライン引数の使用
リスト部分に"@$"を使用すると、シェルスクリプトを実行する際の引数を、リストの値にすることができる。
#!/bin/bash
for i in "$@"
do
echo $i
done
配列変数の使用
配列を使用してリストを指定することもできる。
配列arrayに1から5を設定して、それをリスト部分で呼び出す。
#!/bin/bash
array=(1 2 3 4 5)
for i in ${array[@]}
do
echo $i
done