2009年10月15日木曜日

第11回 シェルスクリプト(その1 概要)

今までに、手作業でしてきたことを、viで追加しているところはcatで、編集しているところをsedに変えて、一部sedでは処理が複雑になるところをAWKに代えてシェルスクリプトで記述した、基本的に、これまで使用してきたコマンドを並べた程度なので、以降、重複した解説を省き、相違点のみを説明する。

また、ここにあるシェルスクリプトは、なるべく変数を使わないようにしている。そのため、冗長な面もあるが、前後の処理に関係なく文脈にとらわれずに、不要な処理はコメントアウトして、必要な処理はそのまま残して、あるいは必要な部分だけ切り取って実行することができる。

シェルスクリプトの実行は指定されたユーザーによって、FTPによって任意のディレクトリ(消し忘れの無い/tmpを推奨する)転送してtelnetから、またはCD-ROM、FD、USBメモリ等の外部メディアが使用できる場合、サーバーのコンソールでコピーして実行することもできる。

たとえば「Oracle インストールの前準備」のスクリプト(oracle_install_1r.sh)をFTPによって/tmpに転送した場合は、下記のとおり実行権限を与え実行する。

# cd /tmp
# chmod u+x oracle_install_1r.sh
# ./oracle_install_1r.sh

USBメモリの場合は差し込むと、/rmdisk以下にオートマウントされる。下記のようにシェルスクリプトがどこにあるのかを調べて、実行権限はすで付与されているので実行するだけである。終了したら「eject」でアンマウントした後に抜き取る。

# df -h|grep rmdisk
/vol/dev/dsk/c2t0d0/noname:c 489M 360M 129M 74% /rmdisk/noname
# find /rmdisk/noname -name oracle_install_1r.sh -ls
34568 3 -rwxrwxrwx 1 root root 2059 Sep 29 16:37 /rmdisk/noname/SOLARIS/shell_script/oracle_install_1r.sh
# /rmdisk/noname/SOLARIS/shell_script/oracle_install_1r.sh
    …
# eject rmdisk

なお、DOS/Windows作成したシェルスクリプトが改行コードが「CR」、「LF」形式の場合には、viにより「:%s/^M//g」として(^Mは「Ctrl」+v、「Ctrl」+mとタイプする)置換する。

Screen   103

sed(StreamEDitor:セド)ファイルまたはパイプラインから入力したテキストデータを、主に文字列置換を行って出力する、次の2つの文型を使用している。

  1. sed 's/検索文字列/置換文字列/' 入力ファイル > 出力ファイル
  2. 入力ファイルを読み込み、最初に一致した検索文字列を、置換文字列で置換して出力ファイルに書き込む。

  3. sed -f スクリプトファイル 入力ファイル > 出力ファイル
  4. 入力ファイルを読み込み、スクリプトファイルの定義に従い置換して、出力ファイルに書き込む。

AWK(オーク)はファイルまたはパイプラインから入力したテキストデータのフィールド処理に適したプログラムである、次の2箇所に使用している。

  1. cat /etc/release|head -1|awk '{print $3}'
  2. /etc/releaseファイルの1行目をAWKに渡す処理である、同ファイルの1行目はリビジョンによって次のようになっている。

    • 3/05
    • Solaris 10 3/05  …  

    • 5/09
    • Solaris 10 5/09  …  

    すなわち、空白で区切られた3カラム目のリビジョンを「awk '{print $3}'」によって取得する。

  3. echo `prtdiag|grep 'System Configuration:'|awk '{print $NF}'`
  4. $NFはフィールド数なので、終わりのカラムを出力する。

    すなわち、prtdiagが出力した'System Configuration:'がある行の末尾のカラムに機種が入っているので、それを取得する。

0 件のコメント:

コメントを投稿