bash shell に関するtips 備忘録

実行時にデバッグ出力する場合のヘッダ

#!/bin/bash -x

root以外が実行すると処理せずに終了させる

if [ $(whoami) != "root" ]; then
        echo "This script must be run as root"
        exit 1
fi

スペースの入ったファイル名を処理するために配列の分割子を改行コードに固定する

export IFS=$'n'

ので、上記設定以降はshell内での配列指定は以下の例のように記述する必要がある

EXTLIST=(
"mov"
"mkv"
"..avi"
"avi.mp4"
"wmv.mp4"
"flv.mp4"
"mpeg"
"mpg"
"flv"
"rmvb"
"wmv"
"M4A"
"avi"
"ts")

rootから全てのユーザのjavaに対してgc実行リクエストする

for line in `ps aux | grep java | tr -s " " | grep -v grep | tr " " "," | cut -d ',' -f 1-2`
do
        arr=( `echo $line | tr -s ',' ' '`)
        user=${arr[0]}
        pid=${arr[1]}
        sudo -u $user jmap -histo:live $pid
done

lockファイルを作らずに、shellの複数起動をしないようにする

参考 : qiita.com/hit/items/e95298f689a1ee70ae4a

_pcnt=`pgrep -fo ${CMDNAME} | wc -l`               
if [ ${_pcnt} -gt 1 ]; then                        
        echo "This script has been running now. proc : ${_pcnt}"
        exit 1                                           
fi