詳説 正規表現 Part2

Rubyの簡単なサンプル if ($reply =~ m/^[0-9]+$/) =~ の部分は マッチする と読むと便利。 m は正規表現マッチを試みるという意味。 $celsius =~ m/([-+]?[0-9]+)([CF])$/ 括弧で囲むことによって、$1には [-+]?[0-9]+ にマッチしたテキスト、$2には [CF] …

詳説 正規表現 Part1

メタ文字について ^cat 行頭のcatという文字にマッチする。 cat$ 行末のcatという文字にマッチする。 gr[ea]y greyかgrayという文字にマッチする。 [0-9a-zA-Z] 数字、英字の大文字、小文字のどれかにマッチする。 [ ] の中にある !.? などはメタ文字ではな…

UNIXシェルスクリプト第3章Part1

シェル関数、組み込みコマンド name() { command } 関数の定義の仕方。 return [n] 関数の戻り値の設定の仕方。 任意の番号を設定すれば、それがこの関数の戻り値となる。 ここで返す値は通常のコマンドの実行終了ステータスと同じ取り扱いになり、シェル変…

UNIXシェルスクリプト第2章

シェル変数の初期設定 ${variable:=value} ${variable=value} 値がある場合、そのままの値を利用する。 値がない場合、valueの値を代入する。 コロンがある場合は変数が未使用、もしくはヌル値がセットされているときに値がないとみなす。 コロンがなければ…

UNIXシェルスクリプト第7章 Part2

sedを使っての編集 sed -e "s/^TextToRemove//" ^ は行の先頭を表す。^abcという指定にすれば、行の先頭にabcという文字列がある場合、という意味になる。 先頭のみを指すので、gは付ける必要がない。 sed -e "s/TextToRemove\$//" $は行の末尾を表す。$はシ…

UNIXシェルスクリプト第7章 Part1

フィルタの使用法 cat file1 file2 file3... | filter_1 | ... 複数のファイルをまとめて処理したければ、catコマンドの引数にファイルを書き並べれば良い。 filter_1 < file | filter_2 | ... 1つだけのファイルならリダイレクション機能を使うほうが良い。…

UNIXシェルスクリプト第10章 Part10

ファイルをサーチするシェルスクリプト findfile 特に無し。 文字列をサーチするシェルスクリプト findstr if [ "$OPTIND" = 1 ] ; then getoptsが使える環境では、OPTINDという変数に自動的に1の値がセットされている。 while getopts iv OPT getoptsコマン…

UNIXシェルスクリプト第10章 Part9

コマンドをサーチするシェルスクリプト findcmd IFS=: for dir in `echo "$PATH" | sed -e 's/^:/.:/' \ sed -e 's/::/:.:/g' \ sed -e 's/:$/:./'` $PATHを : で区切って、先頭や末尾にマークだけがある場合、あるいはカラの指定を全部カレントディレクトリ…

UNIXシェルスクリプト第10章 Part8

ディレクトリをコピーするシェルスクリプト dircopy find . -depth -print | findコマンドは -depthオプションを使うとディレクトリ階層の深い順に表示させる。 付けた場合 付けなかった場合 a/b/c/d/e a a/b/c/d a/b a/b/c a/b/c/ a/b/f/d/e a/b/c/d a/b/f/…

UNIXシェルスクリプト第10章 Part7

指定したフィールドの値を集計するシェルスクリプト addcolumn awk '{total+=$'$COLUMN'} END {print total}' awkコマンドは複数行のデータを処理する。 処理する内容をシングルクォートで囲まなくてはならないので、 $COLUMNはシングルクォートから外してい…

UNIXシェルスクリプト第10章 Part6

行、単語、文字数をカウントするシェルスクリプト Wc wc $d/$PATTERN 2>/dev/null | grep -v " total$" >$TMP wcコマンドはテキストファイルの単語数を表示する。 エラーが出ても、ここでは捨て去る。 最終行にtotalとしてその総計が出力されるが、この行も…

UNIXシェルスクリプト第10章 Part5

シェルアーカイブを作成するシェルスクリプト Shar ※シェルアーカイブというのはBSD4.4以降に作りこまれた機能の1つ。 少数のファイルをftpやmailで配布するのに便利なようにと作られたもの。 シェルスクリプトの中にファイルのリストと中身も入れて1つにし…

UNIXシェルスクリプト第10章 Part4

ディレクトリを作成するシェルスクリプト MkDir IFS=/ for d in $1 IFS変数に / を代入することで区切り文字を / に変更できる。 $1を / で区切って分割し、変数dに入れてループさせる。 case $1 in /*) DIR= ;; *) DIR=. ;; esac 相対パスなら先頭に ./ を…

UNIXシェルスクリプト第10章 Part3

プロセス名に対してシグナルを送るシェルスクリプト Kill ※killコマンドはプロセスIDに対してシグナルを送る。 プロセスIDは数字で表され、ユーザはpsコマンドを使って求めるプロセスが南蛮のプロセスIDで走っているのかを確認しなくてはならない。 プロセス…

UNIXシェルスクリプト第10章 Part2

2つのディレクトリを比較するシェルスクリプト DirCmp ※指定した2つのディレクトリ下にあるファイル構成を比較し、 等しくないファイルをリスト表示する。以下の3パターンの表示を行う。 1番目のディレクトリ下にあって、2番目のディレクトリ下にはないファ…

UNIXシェルスクリプト第10章 Part1

ファイルの連結、表示を行うシェルスクリプト Cat #!/bin/sh シェルスクリプトの最初にはこの宣言が必要。 /bin/shで動作させるため。 if [ ! -r "$1" ] ; then -rオプションはファイルが存在し、読み込み可能かどうかを判定する。 IFS= while read LINE rea…

UNIXシェルスクリプト第9章 Part11

そのシステムを判断する名称を出力する関数 SystemType.sh _HOSTNAME=`hostname | sed 's/\..*//'` hostnameコマンドは、そのマシンのホスト名称を出力するものだが、 システムによってはドメイン名称も一緒に出すものがある。 /..* は最初のドット以後全部…

UNIXシェルスクリプト第9章 Part10

2つの文字列を比較する関数 StrCmp.sh ※2つの文字列を返し、3つの結果を返す関数。 前者と後者が等しければ 0 前者のほうが後者より小さければ -1 前者のほうが後者より大きければ 1 を標準出力に出力する。 _TMP=`{ echo "$1"; echo "$2"; } | sort | sed -…

UNIXシェルスクリプト第9章 Part9

応答要求メッセージを出力する関数 Prompt.sh echo "${@-> }\c" echo -n "${@-> }" ${@-> } という部分は $@ と ${variable:-value} , ${variable-value} の組み合わせ。 応答要求のスタイルを定型化した関数 Question.sh if [ $# -lt 3 ] ; then -lt は Les…

UNIXシェルスクリプト第9章 Part8

システムのタイプが正しいかどうかを判定する関数 IsSystemType.sh ※unameコマンドを使ってシステムの名前を取得する。 uname -s OSの名称 uname -m ハードウェアのタイプ uname -r OSのリリース番号 if [ "$1" = "`uname -s`" ] ; then return 0 elif [ "$1…

UNIXシェルスクリプト第9章 Part7

文字列が数値化どうかを判定する関数 IsNumeric.sh ※シェル変数に代入されている値は、たとえ数値であれ文字として扱われる。 しかしexprコマンドなどは。その文字列を数値として計算させることができる。 expr "$1" + 1 > /dev/null 2>&1 実行終了ステータ…

UNIXシェルスクリプト第9章 Part6

2つのファイルの日付を比べる関数 IsNewer.sh ※更新時刻に関して説明。 ファイルのタイムスタンプには3通りある。 アクセスした時刻、ステータスの変更時刻、修正時刻。 if [ ! -f $1 -o ! -f $2 ] ; then -o はAOR条件演算子で、どちらかが真であれば真。 …

UNIXシェルスクリプト第9章 Part5

質問を出して、YesかNoの応答を取得する関数 GetYesNo.sh while : while文の無限ループを作る。 if [ "`echo -n`" = "-n" ] ; then echo "$@\c" else echo -n "$@" fi echoコマンドはシステムによって改行コードを抑止する方法が異なる。 -nオプションが使え…

UNIXシェルスクリプト第9章 Part4

ファイルやディレクトリの完全パス名を表示する関数 FullName.sh if [ $# -ne 1 ] ; then -ne は != を意味する。$#は引数の数を表す。 echo "Usage: FullName filename | directory" 1>&2 標準出力をエラーメッセージにリダイレクト。 exit 1 シェルを終了…

UNIXシェルスクリプト第9章 Part3

アルファベットの大文字を小文字にする関数 DownShift.sh echo "$@" | tr '[A-Z]' '[a-z]' $@は引数の部分を1個1個ダブルクォートで括った状態にする。 すべての引数がまったくそのままの形でechoコマンドに渡る。 trコマンドは文字を置換、削除する。

UNIXシェルスクリプト第9章 Part2

端末画面をクリアする関数 Clear.sh { clear; } 2>/dev/null || || はOR演算子なのでどれかのコマンドが成功すれば、その後の判定は行わない。 この中括弧は絶対に必要。もしclearコマンドがなくてエラーになった場合には、 このシェルがエラーを出してしま…

UNIXシェルスクリプト 第9章 Part1

リモートホストの状態をチェックする関数 CheckHostname.sh _HOST=${1:-`hostname`} 引数($1)があれば代入。なければhostnameコマンドの結果を代入。 `uname -s` OSの種類を判別するコマンド pingコマンド BSD系であれば-c1というオプションで1回だけ相手の…

サイト作った

ポイントはこれ サイト http://d0rikamon.com