Bash if文とfor文の活用例5つ。ほぼコピペで利用可能

'20/09/21更新:
 本記事では、Linuxのshell(シェル)のひとつであるBash(バッシュ)について、普段よく使用するif文3つ、for文2つの計5つの雛形コードを記載しました。

if文

1. 数値で判定して条件分岐する

 次の例では、xが偶数の場合にx+1をset_numに代入し、xが奇数の場合はx-1を代入します。

#!/bin/sh  
 
x=$((101)) 
echo $x 
val=$((($x)%2))  
if [ $val -eq 0 ]; then  
    set_num=$(($x+1)) 
else  
    set_num=$(($x-1))  
fi  
echo $set_num  

2. 文字列で判定して条件分岐する

 次の例では、flagがtrueの場合にtest.pyを実行します。

#!/bin/sh

flag="true"
if [ "$flag" = "true" ]; then
    python test.py
else
    echo 'flag is not true'
fi

3. 指定ファイルの存在有無によって条件分岐する

 次の例では、/work/test.logファイルが存在しない場合にtest.pyを実行します。

#!/bin/sh

dir_path=/work if [ ! -f ${dir_path}/test.log ]; then python test.py else echo "OK" fi

for文

4. ワイルドカードを用いたファイル検索で、抽出されたファイルの数だけループする

 次の例では、カレントディレクトリ内にあるcsvファイル抽出し、その全てのcsvに対してtest.pyを順番に実行します。-maxdepth 1は、探索するディレクトリ階層の深さを表し、2の場合はサブディレクトリ内まで検索します。

#!/bin/sh

for file in `\find . -maxdepth 1 -name '*.csv'`; do
  python test.py $file

  fname="${file%.*}"
  echo "$fname"
  #chmod 777 $fname.sh
done

5. 指定の数値区間をループする

 次の例では、07,08,09,10,11,12の順にループします。7,8,9,10,11,12でループしたいい場合には、%02gの箇所を%01gとします。この例では、ループした番号に対応したcsvファイルのシンボリックリンクの設定をしています。引数であるパスの設定の順番は、[シンボリックリンクを設定したいディレクトリから見た相対パス] [シンボリックリンクを設定したいディレクトリパス]であることに注意。

#!/bin/sh

for i in `seq -f %02g 7 12`
do
  echo $i
  ln -s ../aaa/aaa_$i.csv ./bbb/aaa_$i.csv   ## symbolic link
done

以上

<広告>