2009-08-01から1ヶ月間の記事一覧

ファイルとiノードの使用率を調べる

partlimit.sh -h | -i for文でdfの結果を1行ずつ処理する。 その後exprで使用率の部分を取り出し$percentに代入。 50%を超えていたらflagに+1し、1以上の場合はdfを実行する。 #!/usr/bin/sh limit="50" if ! [ $# -eq 1 ]; then echo "Usage: partlimit.sh …

/homeのバックアップ作成

カレントディレクトリにユーザーごとのホームディレクトリのバックアップを作成。 findコマンドのオプションで/homeの1階層下のディレクトリを指定する。 #!/usr/bin/sh if ! [ -d homebackup ]; then mkdir homebackup fi for dirname in `find /home -mind…

ホームディレクトリ容量の多いユーザーを調べる

/etc/passwdからユーザー名、UID、ホームディレクトリを切り出し変数にセット。 UIDが500以上かつホームディレクトリがあった場合、duで容量で調べる。 その後ソート、整形、表示する。 #!/usr/bin/sh declare -a username userid userhome username=( $(cut…

グループに属するユーザーリスト

/etc/gorupと/etc/passwdから、必要な項目を取り出し グループごとにそれぞれのGID一致したユーザー名を出力する。 #!/usr/bin/sh IFS_DEF=IFS IFS=" " for grouplist in `cat /etc/group`; do groupid=`echo $grouplist | cut -d":" -f3` groupname=`echo $…

システムユーザ/一般ユーザ別リスト作成

declareコマンドで配列を宣言し、/etc/passwdのuseridとusernameをセット。 for文でuseridが100以下と以上に分け、それぞれファイルに書き込む。 コマンド1 && コマンド2 || コマンド3は コマンド1が真の場合コマンド2を実行し、偽の場合はコマンド3を実行す…

バックグランドジョブをkillする

source killjobs.sh . killjobs.sh 現在のシェルで動作しているジョブを終了する。 ジョブ制御はシェル単位なので、現在のジョブを終了するには、.またはsourceコマンドで実行する。 for文で3つのシグナルを使い、順番に強力なシグナルにする。 jobs -pはプ…

コマンドの詳細を出力する

source addwhich.sh commandname 引数に指定されたコマンドが、エイリアス、キーワード、関数、組み込みコマンド、ファイル のどれにあたるか出力する。 pasteコマンドは複数のファイルを同じ行ごとに結合するコマンド、2つのtypeコマンドを結合する。 ()は…

ごみ箱スクリプト

garbage.sh -e |file|dirname -e ゴミ箱を空にする ゴミ箱に移動する際同じファイル名がある場合は、ファイル名の後に日付を付ける。 #!/usr/bin/sh if [ $# -eq 0 ]; then echo 'Usage : garbege.sh -e file | dir' exit 1 fi test ! -d ~/.garbage && mkdi…

圧縮されているファイルを解凍する

case文で注意することはマッチしにくい文字列を先に書くこと。 *.gzを先に書くと、*.tgz.gzがマッチしてしまう。 #!/usr/bin/sh if [ $# -ne 1 ]; then echo "Usage : uncompress.sh file" exit 1 fi case $1 in *.tgz | *.tgz.gz) tar xvfz $1 ;; *.tar.Z) …

最新のタイムスタンプのファイル10個を出力

newfiles.sh -a | -m | -c ディレクトリ名 -a Access Time -m Modify Time -c Change Time 引数に指定したディレクトリにfindコマンドを実行しファイルのリストを作成。 sortに必要なtmpファイルをmktempコマンドを使い作成し、変数に代入する。 forでファイ…

ファイル名の拡張子を変更する

chextensions.sh OldExtension NewExtension 引数に変更前の拡張子と変更後の拡張子を指定し、カレントディレクトリにある 変更したいファイルの拡張子を変更する。 for文で変更したい拡張子のファイル名をfindで指定。 findで.を指定するときはエスケープす…

ファイル名を小文字に統一する

testコマンドの-fオプションで普通のファイルか確認する。 basenameコマンドはディレクトリを含んだファイル名からファイル名のみ取り出す。 grepコマンドでファイル名に大文字が含まれているか調べる。-qオプションは 調べるのみで出力はしない。grepの終了…

lsからファイル名とファイルサイズのみ出力する

filelist.sh [file | dir] 引数にファイル、ディレクトリを指定、ない場合はカレントディレクトリを処理。 ディレクトリを再帰的に処理する。 for文のfindコマンドは条件のファイル、ディレクトリ名をfilenameにセットしファイルがある限り繰り返す。 その後…

bash - 対話的な処理

メッセージの出力 echoコマンドやヒアドキュメントを使う。 問い合わせメッセージの出力と応えの取得 応答入力待ちの状態のときは、カーソルがメッセージの後ろにくる #!/usr/bin/sh echo -n "[y/n]? " ##-nオプションを使うと改行しない read val1 case "$v…

bash - 文字列の取り扱い

IFS変数 Internal Field Separatorの略で、文字列の区切りとして使われる。 デフォルトでは、スペース、タブ、改行。 readコマンド readコマンドでファイルを読み込ませるとそのファイルの1行ずつをそれぞれの行が標準入力から 入力されたように処理する。1…

bash - 文字列の操作

フィルタを使った文字列処理 実行した結果を``で囲みもとの変数に代入する $ str="abc def ghi" $ str=`echo "$str" | sed -e "s/def/xyz/g"` $ echo "$str" abc xyz ghi 文字列の連結 変数を並べて書く。 余分なホワイトスペースの削除 echoコマンドで出力…

bash - 数値の計算

整数の計算 整数の計算にはexprコマンドを使う。 $ expr 3 + 5 8 $ expr 3 - 5 -2 $ expr 3 '*' 5 #expr 3 \* 5 でもよい 15 $ expr 5 / 3 1 $ expr 5 % 3 2 数値の比較 数値の比較にはtestコマンドを使う 数値かどうかの判定 変数に1を加える。変数が数値な…

awk

sedと機能的にはほぼ同じ。 awk '/パターン/ {アクション}' ファイル名 パターンの部分には正規表現や下記のものを書くことができる (式) 式が真ならコマンドを実行(0以外が真) BEGIN 入力前に無条件にコマンドを実行 END 入力後に無条件にコマンドを実行 パ…

grep

ファイルまたは標準入力から入力を読み込み、与えられたパターンにマッチした行を出力する。 grep [オプション] 正規表現 ファイル名 オプション -G 基本正規表現のみ使用可能 -E 拡張正規表現が使用可能 -P Perl互換の正規表現が使用可能 -i 大文字小文字の…

正規表現

あいまいな文字列パターンを明確に表現するための手段。 sed,grep,awkなどで検索、置き換えに使う。 カテゴリ メタキャラクタ 意味 文字 [] []で囲まれたどれか1文字にマッチ 文字 [^] ^]で囲まれた文字以外にマッチ 文字 [-] -で範囲指定できる 文字 . 任意…

sed

標準入力からデータを受け取って結果を標準出力に書き出す。 パターンに一致した文字列を別の文字に置き換えるときに利用されるのが多い。 sed [opstion] [command] [filename] オプション -e その後の文字列が編集用のコマンド -n 指示した行だけ出力する、…

bash - getoptsコマンド

シェルスクリプトのオプションを解析したりチェックするためのコマンド。 command [-f] [-v value] というシェルスクリプトがあるとします。 FLAG=FALSE #fオプションが指定されたかのフラグ VALUE= #vオプションの引数を代入する OPT= #getoptsが使用する、…

bash - シェル変数の初期設定

変数の値がヌルかなどの条件により、代入する値や表示する内容を変えることができる。 ${var:-word} varに値が入っていないならwordを値として返す ${var:=word} varに値が入っていないならwordを代入する ${var:?word} varに値が入っていないならword出力す…

bash - ヒアドキュメント

シェルスクリプト実行のために必要なドキュメントをシェルスクリプトの中に埋め込むこと。 複数行にわたるメッセージをechoを何行も並べるよりも便利。 command1 << END #...の部分がcemmand1の入力になる。 ... ... END #エラーメッセージの生成 Usage(){ c…

bash - シェル関数

シェル関数はシェルスクリプトをさらに小さくしたもの。C言語などの関数と同じ。 func() { command ... } $ vi aa #!/usr/bin/sh lsl(){ ls -al } $ . ./aa #関数の定義 $ lsl #関数の実行

bash - 組み込みコマンド

組み込みコマンドとはbashの中に含まれているコマンド。 ファイルとして存在していないので、whichなどで調べられない。 .(ドット)コマンド 変数や関数を定義したファイルをを読み込み、利用できるようにする。 . filename :(ヌル)コマンド 何もせず終了コー…

bash - testコマンド

testコマンドは制御文の条件に使われます。 与えられた条件式expressionが真なら終了コード0を、偽なら終了コード1を返します。 また、 [ ] はtestコマンドの別名です。 [ ]の前後にはスペースが必要。 test expression [ espression ] 数値を比較するオプシ…

bash - 制御文

if 条件1; then #条件1の場合の処理 コマンド1 elif 条件2; then #条件2の場合の処理 コマンド2 else #どの条件にも合致しない場合場合の処理 コマンド3 fi while 条件 #条件を満たしている間コマンドを実行 do コマンド done case 文字列 in パターン1) コ…

bash - 特殊変数

シェル変数で最初から組み込まれているものの中に特殊なものがあります。 位置パラメータはシェルスクリプトの引数を変数に代入したのもです。 変数名 値 $0 スクリプトの名前 $1-9 スクリプトに指定された引数の値(数値は引数の位置) $# スクリプトに指定さ…

bash - コマンド置き換え

コマンドを``(バッククォート)で囲むと、実行結果に置き換わります。 変数にコマンドの実行結果を代入して利用する方法が良く使われる。 $ echo "today is `date`" today is Fri Jul 31 10:31:47 2009 $ today=`date +%y%m%d` $ touch log_$today #ファイル…