![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg61Zl-X0fOn64HK4kOKzdMDnBrw8-ROfL9t6MihGBQzTVsXs-Mg17ypQsQ1Z9DPLVVL6groNs7nKZKo5FQkNFTcnkuAopkAJ4vfAFmMhj7ml2SI05p2LU8yZoDomDkn6eiUBAM1QGEuTHfpJHbUKCdw3O1OvLw8hRvAZSaYRbaO3XQaSI-Z4tbmdzr/s1600-rw/shell-e1446549838440.jpg)
shell scriptのfor文は少しクセがある。
他の言語と違う点も多いので、注意しなければいけない。
色々な構文
普通に1から10までloopさせてみる
for1.sh
#!/bin/bash
for i in 1 2 3 4 5 6 7 8 9 10
do
echo $i
done
実行してみる。
$ for1.sh
>> 1
>> 2
>> 3
>> 4
>> 5
>> 6
>> 7
>> 8
>> 9
>> 10
次は、他の言語っぽく書いてみる
for2.sh
#!/bin/bash
for ((i=1;i<=10;i++));do
echo $i
done
実行
$ for2.sh
>> 1
>> 2
>> 3
>> 4
>> 5
>> 6
>> 7
>> 8
>> 9
>> 10
結果は同じだが、二重括弧にする
※doで1行使うのが気になったんで、forの行にくっつけてみました。
次はさらに簡単な記述
for3.sh
#!/bin/bash
for i in {1..10};do echo $i;done
実行
$ for3.sh
>> 1
>> 2
>> 3
>> 4
>> 5
>> 6
>> 7
>> 8
>> 9
>> 10
{1..10}で1〜10までの数字配列と同じになるんですね。
任意フォルダ内のファイル一覧をfor文で処理
lsコマンドと組み合わせることで簡単にファイル一覧を取得できます。
for4.sh
#!/bin/bash
for i in `ls ~/.ssh`;do
echo $i
done
実行
$ for4.sh
>> known_hosts
テキストファイルをfor文で1行毎に処理
テキストファイルを行ごとに処理するにはwhile文と組み合わせると簡単に行なえます。
text.txt
aaa
bbb
ccc
for5.sh
#!/bin/bash
for i in ./text.txt;do
while read line;do
echo $line
done< $i
done
実行
$ for5.sh
>> aaa
>> bbb
>> ccc
0 件のコメント:
コメントを投稿