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:元国税局勤務の起業家向け、遺産相続の相談なら植村洋税理士事務所:一時間無料税理士相談。お気軽に。] |
||||||||||||||||||||||||