LoginSignup
1
2

More than 1 year has passed since last update.

【ShellScript】for文の使用方法

Posted at

現在業務でシェルスクリプトのプログラムを作成しているので、
for文の使用方法についてまとめます。

for文の使い方

基本的な使い方は以下のような記載方法です。

for 変数名 in 繰り返し実行したいリスト
do
  処理
done

実際に簡単な処理を書くと以下です。

for envitem in aaa bbb ccc ddd
do
  echo $envitem
done

以下が実行結果です

aaa
bbb
ccc
dd

変数envitemにaaaが渡され、echo $envitemでaaaをechoします。

この処理をbbb ccc dddも繰り返しで実行してます。

使用用途

同じ処理を複数に対して実行する際に使用します。

例でいうと
あるファイルを20台のサーバに対して転送する際に使用します。

for文を使わない場合:

scp testfile.txt examplesv01:/tmp

上記を20台実行しなければなりません。(めんどくさいですね、、、)

for文を使うと以下だけで実行できます

for server in examplesv01 examplesv02 ...
do
  scp testfile.txt $server:/tmp
done

ホスト名が連番なら以下のようにできます

serverlist=(examplesv{01..20})# examplesv01-20までの配列を作成
for server in ${serverlist[@]}
do
  scp testfile.txt $server:/tmp
done

配列の変数分処理する場合

配列が格納されている変数を使用してfor文で処理する場合は以下のように記載します。

testlist=(aaa bbb ccc ddd)
for test in ${testlist[@]}
do
  echo $test
done

実行結果が以下です。

aaa
bbb
ccc
ddd

[@]を変数名部分に入れる必要があります。

これがない場合は、以下のように最初の部分(aaa)のみが処理されます

testlist=(aaa bbb ccc ddd)
for test in $testlist
do
  echo $test
done

補足 zshの場合

先ほどまでの記載部分はbashを想定してます。
しかし、zshの場合は[@]を入れなくても配列分処理されるようです。

~$ echo $SHELL
/bin/zsh
~$ lists=(aaa bbb ccc)
~$ for list in $lists
for> do
for>   echo $list
for> done
aaa
bbb
ccc

私はSESのインフラエンジニアで、今まで3つの現場を経験してますが、
どの現場のサーバも基本的にはbashを使用していたので、
あまり気にすることではないかもしれないですが、
Macbookで作業していたりするとzshを使用しているかと思いますので、
bashの気持ちで書いてると思った通りの処理ができないかもしれないですね。

ちなみにこちらは.shファイルに記載して実行したものではなく、
ターミナル上で実行しているため、zshになってましたが、
.shファイルに記載する場合は、文頭にどのシェルを使用するか記載するので、
基本的にはbashかと思います。

以上です。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2