shell script tips目次
はじめに
このページはシェルスクリプトについてのtip を記載しています。 連続実行連続ファイル変換カレントディレクトリのすべてのppm をpng に変換する。 for i in *.ppm; do convert $i ${i%ppm}png; done 連続ファイルsed 変換あるテキストファイルでGPixel/s (4 BytePerPixel) を間違えてGB/s と書いてしまったとき、もとに戻すshell script. for i in *.txt; do sed "s/GB\/s/GPixel\/s \(4 BytePerPixel\)/g" $i > ${i%.txt}-mod.txt ; done 引数チェック
以下は引数が2 つ以下の時にはusage を示す例。 if [ $# -lt 2 ]; then cat <<-END usage: command [-f] [-l] filename -f : force mode -l : list command (do noting) END fi
引数が2 つ以外の時を指定するためには [ $# -ne 2 ] とすればよい。
日付の取得曜日を表す数字を取得する。 STRING_DATE=`date+"%w"` 年月日を取得する。 STRING_DATE=`date+"%Y%m%d"` 引数の確認とルート権限の確認スクリプトで実行者がroot であるかどうかを調べる。 #!/bin/sh # sample if [ $# -ne 4 -o $(id -u) != "0" ] ;then echo "shellscript.sh explanation." echo "Run as root." echo "usage: ./shellscript.sh AAA BBB CCC DDD" exit 1 fi # ここから本当のscript を書く解説
メール送信でコマンド実行終了を通知する
コマンド実行終了時にメールでログを送る例。 #!/bin/sh LOGFILE=/home/user/tmp.log $ command AAA BBB CCC DDD > ${LOGFILE} # log message echo "EXECUTED" >> ${LOGFILE} uname -a >> ${LOGFILE} date | nkf >> ${LOGFILE} # send a mail mail -s "NOTIFICATION ABOUT END OF SCHEDULED PROGRAM" MAILADDRESS@DOMAIN < ${LOGFILE} 実行時ファイル、ディレクトリエラーチェック・ログ出力つき実行スクリプト
テスト自動化のスケジュールするシェルスクリプトなどに使える。 #! /bin/sh dir1=logs file1=`date '+%Y%m%d'` com1=ANY_COMMAND_NAME if [ ! -f ${dir1}/${file1} ]; then echo "error: no such file, ${dir1}/${file1}" exit 1 fi if [ -f ${com1} ]; then echo "error: no such command ${com1}" exit 1 fi # "mkdir -p dirname" で途中のディレクトリもなければ作成します mkdir -p ${dir1} if [ $? -ne 0 ]; echo "error: cannot generate following directory ${dir1}" exit 1 fi ${com1} > ${dir1}/${file1} exit 0 日付自動付与バックアップスクリプト
このコマンドで対象ディレクトリを現在の時刻付きで圧縮・保存します。 #!/usr/bin/env sh #$Id: backupts.sh,v 1.2 2006/06/07 04:20:51 kgussan Exp $ #================================================================ echo "$0: start" BACKUP_DATE=`date +"%Y%m%d-%H%M"` LOCAL_HOST=`uname -n` LOCAL_USR=`whoami` #BACKUP_FILE=$1-${BACKUP_DATE}.tgz # if [ $# -ne 1 ]; then echo "$0: backup script with date named." echo "$0:" echo "$0: Usage: Command [TARGET_DIRECTORY]" echo "$0:" exit 1 else echo "$0: tar archiving ${1}." ARG_NOSLASHEND=`echo ${1} | sed 's/\///'` #ARG_NOSLASHEND=`echo ${1} | sed 's/\//#SLASH#/'` #BACKUP_FILE_NOSLASHEND=`echo ${BACKUP_FILE}` BACKUP_FILE=${ARG_NOSLASHEND}-${BACKUP_DATE}.tgz echo "$0: tar archiving ${BACKUP_FILE}" tar czpf ${BACKUP_FILE} $1 echo "$0: end." fi タグリスト抽出(XMLなど)
出力を参照し、タグのデータを参照することができる。 #! /bin/sh # 1) pick up tagged data. # 1-1) put data to pipeline with cat # 1-2) URL marking check with sed # 1-3) change bracket to return-code with tr # 1-4) get tag-name and data with awk # 1-5) sort and uniq # 2) display with tabbed. # 3) each lines is sorted by words and tags. # # Usage # taglist xml-file # cat "$1" | sed -e 's#systemitem *role="url"#URL#g' -e 's#/systemitem#/URL#' | tr ' (){}[]' '\n\n\n\n\n\n\n' | egrep '>[^<>]+</' | awk -F'[<>]' -v FILE="$1" \ '{ printf("%-31s\t%-15s\t%s\n", $3, $2, FILE) }' | sort | uniq -c | sort -k2,2 -k3,3 | awk '{ print ( $2 = = Last ) ? ($0 " <----") : $0 Last = $2 }' memo
参考文献・参考ウェブページ履歴
|
||||||||||||||||||||||||
|
||||||||||||||||||||||||
ご意見、ご感想、誤字、間違い等、お気づきの点がありましたら KGussan@Gmail.com まで連絡ください。
このウェブページの注意・免責事項
Copyright (C) 2004-2012 KGussan.
[トップページ]
[PR:元国税局勤務の起業家向け、遺産相続の相談なら植村洋税理士事務所:一時間無料税理士相談。お気軽に。] |