目次

内容

複数のファイルに対する処理

  • lsコマンドと同じ一覧
    for FILE in "./*" do;
       echo $FILE;
    done;

日付の処理

  • printfで日付を整形
    DAY_START=1;
    DAY_END=31;
    MONTH="04";
    YEAR=2008;
    
    COUNT=$DAY_START;
    while [ $COUNT -le $DAY_END ];
    do
        DATE=`printf "%04d/%02d/%02d" $YEAR $MONTH $COUNT`;
        echo $DATE;
        COUNT=`expr $COUNT + 1`
    done

文字の置き換え

  • filepath=/opt/apache/conf/httpd.conf.template に対するパターン照合
    ${filepath}		/opt/apache/conf/httpd.conf.template
    ${filepath##/*/}	                 httpd.conf.template
    ${filepath#/*/}	             apache/conf/httpd.conf.template
    ${filepath%.*}	        /opt/apache/conf/httpd.conf
    ${filepath%%.*}		/opt/apache/conf/httpd

多重起動防止スクリプト

  • cron等で自動実行するときに便利
  • 使い方
    • name_of_script <スクリプト名> <スクリプト名>
  • 注意
    • スクリプトの一行目にはshebang(#!/bin/bashとか)を記述し、実行権限を与えておくこと
    • ログの出力にteeを使っているのは、2>&1だけでは標準エラーが出力されないため。※理由は不明
    • スクリプトの名前が「batch.pl」なら、ログ出力先に「batch」というサブディレクトリを用意しておくこと
  • スクリプトはこちら
    #!/bin/sh
    
    LOG_DIR="/path/to/logs";
    BIN_DIR="/path/to/bin";
    
    ### 配列に指定されたスクリプトを逐次実行
    argv=("$@")
    for i in `seq 1 $#`; do
        SCRIPT_NAME=${argv[$i-1]};
        ### スクリプトの存在をチェック
        if [ ! -f ${BIN_DIR}/$SCRIPT_NAME ]; then
            echo "ERROR: Script '${SCRIPT_NAME}' not found.";
            exit 1;
        fi
        ### 二重起動防止
        if (( `ps -ef | grep ${SCRIPT_NAME} | grep -v grep | wc -l` > 2 ));then
            exit;
        fi
        ### 起動
        ${BIN_DIR}/${SCRIPT_NAME} 2>&1 | tee ${LOG_DIR}/${SCRIPT_NAME%%.*}/`date +\%Y-\%m-\%d_\%H-\%M-\%S`.log 1>/dev/null
    done

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-09-25 (日) 19:27:03 (444d)