Linux

Bourne Shell 制御構造

if 〜 then 〜elif

if 〜 then 〜elif 〜文の基本形

if [ 条件式]; then
    コマンド1
elif [ 条件式]; then
    コマンド2
else
    コマンド3
fi 

if 文 例

echo input1
read i1
echo input2
read i2

if [ $i1="0" -a $i2="1" ]; then
  echo "OK!"
else
  echo "NG!"
fi

1)-a and:-o Or
2)「i1=0」且つ「i2=1」ならば、OK。左記以外なら、NG

case 〜in 〜;;〜esac

case文の基本形

case 文字列 in
パターン1)
        コマンド1
  ;;
パターン2)
  コマンド2
  ;;
パターン3)
        コマンド3
        ;;
esac

case 文例

read input1
case $input1 in
y*)
  echo "OK"
  ;;
no|No|NO)
  echo "NG"
  ;;
[a-z][A-Z]*)
  echo "Alphabet"
  ;;
[0-9]*)
  echo "Numeric"
  ;;
esac

1)y:で始まる任意の文字列
2)no|No|NO:no、No、NOの何れか
3)「a-z」「A-Z」:aからz、AからZのいずれかで始まる任意の文字列
4)「0-9」:0から9までのいずれかで始まる任意の文字列

 

while〜条件〜do〜done

while 例

while 条件
do
         コマンド式が真である間繰り返し実行
done

CSVFILE=$1
echo $1
while IFS=, read aa bb cc;
do
        aa_arr+=($aa)
        bb_arr+=($bb)
        cc_arr+=($cc)
done <$1

arr_max=`expr ${#aa_arr[*]}`
i=0
while [ $i -lt $arr_max ]
do
          echo ${aa_arr[$i]},${bb_arr[$i]},${cc_arr[i]}
          i=`expr $i + 1`
done

1)CSVファイルの内容を読み込み配列に格納する。

2)配列の最大値を「arr_max」に格納する。

3)配列の最大値まで繰り返し処理を実行する。

数字比較演算子

演算子意味
-eq等しい
-ne等しくない
-ltより小さい
-le以下
-gtより大きい
-ge以上

until

until文

cnt=0
until [ $cnt -eq 10 ]
do
         cnt=`expr ${cnt} + 1`
          echo $cnt
done

1)カウントが10になるまでの間繰り返す。

-Linux