ARCHIVESDRIVE HB

オイラはホームベーカリー!

謎の空配列君が生まれる

24 時間以内に特定のディレクトリに生成されたファイルを、ストレージに突っ込むスクリプトを書いた。ぶっちゃけバックアップ用のスクリプトなんだけど。その道中のチャートのメモ。

出力の確認

こんな感じで書いて pinya.sh として保存する。

#!/bin/bash
TODAY=`date +%Y%m%d`

BACKUP_FILES=(`find /opt/backup/ -maxdepth 1 -mtime 0|exec grep ${TODAY}`)

  COUNT_ARRAYS=${#BACKUP_FILES[@]}
    while [ 0 -le ${COUNT_ARRAYS} ]
      echo ${COUNT_ARRAYS} ${BACKUP_FILES[${COUNT_ARRAYS}]}
      (( --COUNT_ARRAYS ))
    done

chmod a+x しといて実行すると /opt/backup/ 以下から find と grep した結果が取れる(はず)。

[user@localhost ~]$ ./pinya.sh
7
6 TODAY
5 TODAY.火属性のぴにゃっぴ
4 TODAY.水属性のぴにゃっぴ
3 TODAY.風属性のぴにゃっぴ
2 TODAY.土属性のぴにゃっぴ
1 TODAY.光属性のぴにゃっぴ
0 TODAY.闇属性のぴにゃっぴ

ちょっと待って!

[user@localhost ~]$ ./pinya.sh
7  <= ここ
6 TODAY

この空行なんなん?(しろめ

確認のため配列に入れずに出力してみる

ほなら試してみまひょ……。

#!/bin/bash
TODAY=`date +%Y%m%d`

BACKUP_FILES=(`find /opt/backup/ -maxdepth 1 -mtime 0|exec grep ${TODAY}`)

echo ${BACKUP_FILES}

chmod a+x しといて実行するとこんな結果になる(はず)。

[user@localhost ~]$ ./pinya_rev2.sh
TODAY TODAY.火属性のぴにゃっぴ TODAY.水属性のぴにゃっぴ TODAY.風属性のぴにゃっぴ TODAY.土属性のぴにゃっぴ TODAY.光属性のぴにゃっぴ TODAY.闇属性のぴにゃっぴ

空行入ってないやん!なんやねん!(しろめ

という訳でこのように回避した

このように場当たり的な対処を致しもうした。

  COUNT_ARRAYS=${#BACKUP_FILES[@]}
    while [ 0 -le ${COUNT_ARRAYS} ]
    do
      # 配列の中身を参照して null では無い時は処理を行う
      # null なら無視する
      if [ -n "${BACKUP_FILES[${COUNT_ARRAYS}]}" ] ; then
        # ジッサイの処理はここに書く
        # echo ${NDB_BACKUP_FILES[${COUNT_ARRAYS}]}
        (( --COUNT_ARRAYS ))
      else
        (( --COUNT_ARRAYS ))
      fi
    done

while の中で if 使うってあんまイケてない感じするというかワイのコードそもそもイケてないし見なかったことにする。

関係ないけどハマり所さん?!

if [ -n "${BACKUP_FILES[${COUNT_ARRAYS}]}" ]

ここ最初「シェルスクリプトに型の概念なんて必要ねーんだよ!( null か何かにしろ入ってるかどうかわかればいいよ派」という暴論から、以下のようにしておりました。

if [ -n ${BACKUP_FILES[${COUNT_ARRAYS}]} ]

結果全部 else 側に抜けていくので「なんでや!」とわりと悩みましたが、結局以下を参考にさせてもらいました。

d.hatena.ne.jp

今回は #!/bin/bash なので declare 使えば型宣言できるはずだけど、#!/bin/sh とか他のシェバングの場合は出来なかったと思うので前述のような形に落ち着きました。この空のやつが出来るのってサブシェル作ってるからかなのかなー(と思いつつちゃんと調べない)。