2009-01-01から1年間の記事一覧

名前で指定したプロセスにシグナルを送る

#!/bin/sh #killall.sh #デフォルトではスクリプトを実行したユーザーがオーナーになっているプロセスだけを #killする(実行ユーザーがrootの場合は除く)。プロセスに送るシグナルは #-s SIGNAL、ユーザーは-u userで、端末は-t ttyで指定する #-nフラグを指…

システムの日付と時刻を設定する

#!/bin/sh #setdate.sh #dateコマンドのフロントエンド。日付と時刻を簡単に設定できる askvalue(){ #$1=フィールド名,$2=デフォルト値 #$3=最大値,$4=必要な文字数/桁数 echo -n "$1 [$2] : " read answer if [ ${answer:=$2} -gt $3 ]; then echo "$0: $1 …

setuidプログラムを見つける

#!/bin/sh #findsuid.sh #システム上の全てのsetuidコマンドを調べて #書き込み可能かどうかをチェックし結果をわかりやすく表示する mtime="7" verbose=0 if [ "$1" = "-v" ]; then verbose=1 fi for match in $(find / -type f -perm -4000 -print); do if…

dfからの出力を読みやすくする

#!/bin/sh #newdf.sh awkscript="/tmp/newdf.sh.$$" #trap "rm -f awkscript" EXIT cat << 'EOF' > $awkscript function showunit(size) { mb = size / 1024; prettymb=(int(mb * 100)) / 100; gb = mb / 1024; prettygb=(int(gb * 100)) / 100; if ( substr…

ディスクの空き容量を調べる

#!/bin/sh #diskspace.sh tempfile="/tmp/available.$$" trap "rm -f $tempfile" EXIT cat << 'EOF' > $tempfile { sum += $4 } END { mb = sum / 1024 gb = mb /1024 printf "%.0f MB (%.2fGB) of available disk space\n", mb, gb } EOF df -k | awk -f $t…

ディスクの使用状況を分析する

#!/bin/sh #fquota.sh MAXDISKUSAGE=20 for name in $(cut -d: -f1,3 /etc/passwd | awk -F: '$2 > 99 { print $1 }') do echo -n "User $name exceeds disk quota. Disk usage is: " find / /usr /var -user $name -xdev -type f -ls | \ awk '{ sum += $7 …

ファイルを最大限に圧縮する

#!/bin/sh #bestcompress.sh #各圧縮プログラムでファイルを実際に圧縮しサイズのもっとも小さな圧縮ファイルを選び出す Z="compress" gz="gzip" bz="bzip2" Zout="/tmp/bestcompress.$$.Z" gzout="/tmp/bestcompress.$$.gz" bzout="/tmp/bestcompress.$$.bz…

圧縮ファイルを表示する

#!/bin/sh #zcat.sh #圧縮ファイルを透過的に処理するスクリプト Z="compress"; unZ="uncompress"; Zlist="" gz="gzip" ; ungz="gunzip" ; gzlist="" bz="bzip2" ; unbz="bunzip2" ; bzlist="" #指定したファイルが存在した場合は圧縮ファイルの拡張子を持っ…

長い行だけを折り返す

#!/bin/sh #toolong.sh width=72 if [ ! -r "$1" ]; then echo "Usage: $0 filename" >&2 exit 1 fi while read input ; do if [ ${#input} -gt $width ]; then echo "$input" | fmt else echo "$input" fi done < $1 exit 0 $ ./toolong.sh ragged.txt So s…

ファイルの内容とファイルに関する情報を表示する

#!/bin/sh #showfile.sh width=72 for input ; do lines="$(wc -l < $input | sed 's/ //g')" chars="$(wc -c < $input | sed 's/ //g')" owner="$(ls -ld $input | awk '{print $3}')" echo "------------------------------------------------------------…

行番号をつけてファイルを表示する

#!/bin/sh #numberlines.sh for filename ; do linecount="1" while read line ; do echo "${linecount}: $line" linecount="$(( $linecount + 1 ))" done < $filename done exit 0 $ ./numberlines.sh numberlines.sh 1: #!/bin/sh 2: #numberlines.sh 3: 4…

メモ書きユーティリティ

#!/bin/sh #remember.sh #コマンドラインで使える簡単なメモ rememberfile="$HOME/.remember" if [ $# -eq 0 ]; then echo "Enter note, and with ^D: " cat - >> $rememberfile else echo "$@" >> $rememberfile fi exit 0 #!/bin/sh #remindme.sh #データ…

ファイル名からファイルの場所を探す

#!/bin/sh #mklocatedb.sh #findコマンドを使ってlocateデータベースを作成する locatedb="/var/locate.db" if [ "$(whoami)" != "root" ]; then echo "Must be root to run this command." >&2 exit 1 fi find / -print > $locatedb exit 0 #!/bin/sh #loca…

ファイルの削除操作を記録する

#!/bin/sh #logrm.sh #ファイルの削除操作を記録する。ただし-sフラグが指定された場合は記録しない removelog="/var/log/remove.log" if [ $# -eq 0 ]; then echo "Usage: $0 [-s] list of files or directories" >&2 exit 1 fi if [ "$1" = "-s" ]; then s…

削除ファイルのアーカイブを操作する

#!/bin/sh #unrm.sh #指定されたファイルが隠しディレクトリにあるかどうか探す #該当するファイルが複数見つかった場合には日付の新しい順に #リスト表示し目的のファイルをユーザーに選択させる mydir="$HOME/.deleted-files" realrm="/bin/rm" move="/bin…

ファイルを削除すると同時にアーカイブに保管する

#!/bin/sh #newrm.sh #rmの代替コマンド。ユーザーのホームディレクトリに作成した #ディレクトリを使って簡単な復元機能を提供する。ファイルだけでなく #ディレクトリも扱える。-fフラグが指定されるとファイルは保管されず #削除される mydir="$HOME/.del…

長い行を整形する

#!/bin/sh #nfmt.sh #nroffを使ったfmt #-w行の幅を指定する #-hハイフネーションを有効にする while getopts "hw:" opt; do case $opt in h ) hyph=1 ;; w ) width="$OPTARG" ;; esac done shift $(($OPTIND -1)) nroff << EOF .ll ${width:-72} .na .hy ${…

echoの動作の違いを吸収する

echo -nフラグが使えないバージョンがある echon1 (){ echo "$*" | awk '{ printf "%s",$0 }' } echon2 (){ printf "%s" "$*" } echon3 (){ echo "$*" | tr -d '\n' }

入力された日付が有効か確認する

#!/bin/sh #valid_date.sh exceedsDayInMonth(){ #月と日を引数として受け取り、指定された日がその月の範囲に #収まっていれば0、そうでない場合は1を返す case $(echo $1 | tr '[:upper:]' '[:lower:]') in jan* ) days=31 ;; feb* ) days=28 ;; mar* ) da…

入力値が浮動小数点として有効か確認する

#!/bin/sh #validfloat.sh #入力値は小数点を区切りとして2つの部分に分ける。 #まず、小数点の左側の部分が有効な整数であるか確認する #次に、小数点の右側の部分が負でない有効な整数であるか確認する . validint.sh validfloat(){ fvalue="$1" if [ ! -z…

入力が整数値として有効かどうか確認する

#!/bin/sh #validint.sh validint(){ #2番目3番目の引数が指定されていればそれぞれ値の範囲の上限と下限として #扱いその範囲に収まっているかもチェック。2番目以降の引数が指定されて #いなければ値の範囲チェックは行わない number="$1" min="$2" max="$…

値の大きな数を見やすくする(,を入れる)

#!/bin/sh #nicenamber.sh nicenumber(){ #入力された値は.を小数点の区切り文字と見なして処理する #-dフラグで別の値を指定された場合を除き、出力される値の小数点の #区切り文字には.が使われる #小数点の左側を取り出す integer=$(echo $1 | cut -d. -f…

日付の形式を整える

#!/bin/sh #normdate.sh monthnoToName(){ case $1 in 1) month="Jan" ;; 2) month="Feb" ;; 3) month="Mar" ;; 4) month="Apr" ;; 5) month="May" ;; 6) month="Jun" ;; 7) month="Jul" ;; 8) month="Aug" ;; 9) month="Sep" ;; 10) month="Oct" ;; 11) mon…

入力内容が英数字だけかどうかチェックする

#!/bin/sh #validalphanum.sh validAlphaNum(){ #入力内容をsedで加工しその結果を元の入力内容と比較する compressed="$(echo $1 | sed -e 's/[^[:alnum:]]//g')" if [ "$compressed" != "$1" ]; then return 1 else return 0 fi } echo -n "Enter input: "…

指定されたプログラムがPATHに存在するか調べる

#!/bin/sh #inpath.sh #絶対パスでプログラムが指定された場合は、該当プログラムが存在するか確認し #そうでない場合はPATHのディレクトリリストにプログラムが含まれているかを確認する in_path(){ #コマンド名とPATHを受け取りコマンドを探す #コマンドが…

メモを削除する

#!/bin/sh #memo_rm.sh . f_askstring.sh . f_chknum.sh . f_chkdate.sh . f_search_memo.sh . f_readline.sh . f_dispmemo.sh . f_yesno.sh MEMOFILE=memo.txt MEMOTEMP=memo.tmp while : ; do echo "" echo "*** Select search Menu ***" echo "1) Date." …

メモを読み出す

#!/bin/sh #memo_view.sh . f_askstring.sh . f_chknum.sh . f_chkdate.sh . f_search_memo.sh . f_readline.sh . f_dispmemo.sh MEMOFILE=memo.txt MEMOTEMP=memo.tmp while : ; do echo "" echo "*** Select search Menu ***" echo "1) Date." echo "2) Ti…

メモを残す

#!/bin/sh #memo_create.sh . f_askstring.sh ask_string "Memo Title : " 0 MTITLE=$_STR ask_string "Memo Text : " 0 MTEXT=$_STR MEMOFILE=memo.txt NOWDT=$(date '+%y-%m-%d') NOWTM=$(date '+%H:%M:%S') echo "${NOWDT} ${NOWTM} ${MTITLE} ${MTEXT}" …

アーカイブとしてファイルをバックアップする

#!/bin/sh #backup2.sh BACKUP_F=backup.tar TMP=backup.tmp find ${HOME} \( -path ${HOME}/\.\* -prune \) -or \ -name \* -print > ${TMP} tar -uf ${HOME}/${BACKUP_F} $(cat $TMP) 2> /dev/null rm ${TMP} unset BACKUP_F $ ls ~ $ ./backup2.sh $ ls ~…

使用頻度の高いコマンドを表示する

#!/bin/sh #cmd_best10.sh H_FILE="$HOME/.bash_history" if [ ! -f "${H_FILE}" ]; then echo " Command history does not exist." exit 1 fi cat "${H_FILE}" \ | awk '{print $1}' \ | sort -f \ | uniq -c \ | sort -nr \ | head -10 unset H_FILE $ ./c…