ラベル sh の投稿を表示しています。 すべての投稿を表示
ラベル sh の投稿を表示しています。 すべての投稿を表示

2013年12月16日月曜日

シェルで文字列比較

シェルで文字列比較をしたかったので。
#!/bin/sh

ARRAY=(aaa bbb ccc abc)

for ITEM in ${ARRAY[@]}; do
  case $ITEM in
    *c)
      # ccc, abc
      echo "cで終わる。"
      ;;
    a*)
      # aaa
      echo "aで始まる。"
      ;;
    *)
      # bbb
      :
      ;;
  esac
done
あと、 if とか case の中で何もしたくない時は「:」を使う。

再帰的にファイル数、ディレクトリ数を取得する

CentOSは1つのディレクトリに最大32000個までしかディレクトリを作れない。
でも作るシステムによってはテンポラリのディレクトリとかが溜まって危ないかもしれないのでチェックスクリプトを作ってみた。

#!/bin.sh

DIR=/home/hoge/

Seek(){
  for ELEM in * ; do
    if [ -d "$ELEM" ] ; then
      # ファイルだけなら -type f
      # ディレクトリだけなら -type d
      CNT=`find "$ELEM" -maxdepth 1 -type d | wc -l`
      if [ $CNT -ge 5000 ] ; then
        # 5000個を超えているものだけ出力
        PWD=`pwd`
        echo "$PWD/$ELEM : $CNT"
      else
        # 5000個を超えていないディレクトリだけさらに再帰的に処理
        (cd "$ELEM";Seek;)
      fi
    fi
  done
}

2013年2月21日木曜日

シェルでコマンドの実行結果の確認

rsync -avz /home/user/source/ /home/user/dest/ >& /tmp/rsync.log

if [ $? -eq 0 ]; then
  echo "成功"
else
  echo "失敗"
fi

シェルからpsql経由でSQL実行

#!/bin/sh

DB_NAME='db_name'

DB_RET=`psql -U postgres -c "SELECT COUNT'(*) FROM pg_database WHERE dat_name = '$DB_NAME'" postgres | cut -d"
" -f3`

echo $DB_RET