LoginSignup
0
0

More than 3 years have passed since last update.

[シェルスクリプト]for文

Posted at

シェルスクリプトでのfor文の書き方

基本的な書き方

  • inの後に並べたワードリストがループ内で「val」として順番に扱われる
  • 処理はdodoneで挟む
  • 処理内でワードリストの値はforの後の文字列に$をつけて呼び出す
for val in list1 list2 list3 #「list*」がワードリストです
do
echo $val #先頭に$をつけてワードリストの値をループごとに左から順番に設置されます
done

**結果**
list1
list2
list3

ポイント

C言語やJavaのfor文は「ループカウンタ」を用意しカウンタの数だけ繰り返しすることが殆どだと思います。
シェルスクリプトでのforは、「ワードリスト」を使って繰り返しをするという違いがあります。

Javaなどのfor文のような記述も出来るようになっているが、ワードリストをつかうほうがbashでは一般的のようです。
また、シェルスクリプトでのforは、比較的繰り返し条件が単純な場合に利用されます。
※ 複雑な条件式が必要な場合は「while」を使用するのが一般的のようです。

ワードリストは、処理の中で使わなくてもOK

do,doneの間に記述される処理にワードリストを使わない場合、単純にワードリストの個数分同じ処理がされるだけです。

seqコマンドで、連続した数字を出力

seqの後ろに数字を1つだけ入れると1からスタートしてその数字までの連番が出力さますます。

seq 5
1
2
3
4
5

# 値の個数: 5個

ちなみに以下のように2つ並べると開始の数字を決められる(今回は-2からスタートしている)

seq -2 6
-2
-1
0
1
2
3
4
5
6

# 値の個数: 9個

ワードリストの代用として使える

ワードリストの入れる箇所に、seqコマンドをバッククウォーテーションで囲って記述するとseqコマンドが実行され結果の値や値の個数をワードリストとして使えます。

for val in `seq 3` #必ずバッククウォーテーションで囲います
do
touch file$val.txt
done

**結果**
file1
file2
file3

練習

【作るもの】
バックアップコマンド
カレントディレクトリにある全てのファイルとフォルダをBACKフォルダにコピーする。

【手順】
ファイルは Desktop/sh 内に作成します。

ファイル作成とパーミッションの変更

touch sh/folderBack.sh # ファイル作成
chmod 755 sh/folderBack.sh # 権限変更

パスを通す
これでローカルPC内であれば、どこからでもファイル名だけで実行できるようになります。

export PATH=$HOME/Desktop/sh:$PATH
source ~/.bashrc
source ~/.bash_profile

スクリプト内容

vi sh/folderBack.sh # エディタで編集(ここはエディタであればなんでもOK)
folderBack.sh
#!/bin/sh
#カレントディレクトのファイルとフォルダをBACK/にコピー

for i in `ls -a *`
do
mkdir -p BACK/
cp $i BACK/$i.back
done

実行
バックアップするファイルが無いと試せないので、事前にshフォルダには、作成しているfolderBack.shファイルの他に、for.shファイル、print.shファイルで合計3ファイルがあり、その状態で実行します。

実行前のshフォルダ内

tree
.
├── folderBack.sh
├── for.sh
└── print.sh

実行

folderBack.sh

結果
BACKフォルダが作成され、その中にファイル名の最後に.backが追加された状態でコピーができました。

実行後のshフォルダ内

tree
.
├── BACK
│   ├── folderBack.sh.back
│   ├── for.sh.back
│   └── print.sh.back
├── folderBack.sh
├── for.sh
└── print.sh

参考

0
0
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
0
0