シェル・スクリプト 理工学研究科 013371 清土桂一郎 ○概要 Unix で用いるコマンドを、同じ命令形式で記述しファイルに格納・実行する事により、 連続した命令実行が可能なる。ここで用いるプログラミング言語がシェルプログラミング 言語である。シェルプログラミング言語は、単なるコマンド言語だけではなく、ループ処 理や条件判断などの機能も備えているため、C や Fortran といった言語で作成するプログ ラムと同じ働きをするプログラムを作る事が可能である。このシェルプログラミング言語 を用いて作成したファイルをシェル・スクリプトと呼ぶ。また、言語の書式自体をシェル・ スクリプトとも呼ぶ。 ○シェルとは? シェルとは、UNIX のシステムとコンピュータを操作する人間(ユーザ)との仲立ちをす るプログラムで、ユーザーが入力したコマンドを理解し、システムへと送る役割を担って いる。 U ユーザーA シェル N シェル I X シェル ユーザーB ユーザーC シェルは一つの独立したプログラムで、ユーザーがログインしてログアウトするまで起 動しているものです。いくつかの種類があり、ユーザーが必要に応じてその種類を選択す る事も可能で、カスタマイズすることも可能です。ユーザーごとにそれぞれシェルが起動 する。 この状態は、一般的な UNIX でのログイン画面です。ここでユーザーがログインすると、 シェル(画面は tcsh)が起動し、コマンド待ちの状態になる。(コマンド・プロンプト)こ の状態で、UNIX の内部コマンド(ls や cd)や外部のプログラム起動を入力する事で、シ ェルがそのコマンドを理解し、プログラムを実行するように UNIX システムに命令をだす。 このようにシェルは、コマンド・インタープリタとしての性質を持つが、この他にプログ ラム言語的性質も持っている。シェル・スクリプトで記述されたファイルを実行する事で シェルは、その内容を理解し、命令を UNIX に送る。これによって、プログラムの連続実 行や条件判断、繰り返しなどの処理を行えるようになる。 ○シェルの代表的な種類と歴史 ・Bourne シェル(B シェル):UNIXシステムの標準シェル ・Korn シェル(K シェル):Bシェルにはないコマンドの別名やヒストリー機能を備え、 さらにBシェルと互換性のあるシェル ・C シェル:Bシェルにはないコマンドの別名やヒストリー機能を備えたシェル UNIX は AT&T の Dennis Ritchie と Ken Thompson によって 1969 年に生み出された。 このとき、システムとユーザーが対話できるようにする方法を作り出そうと考えた。その 後、この考えから生み出されたものが Bourne シェル(sh)である。Bourne シェル(B シ ェル)が作られてからは、C シェル (csh)や Korn シェル(ksh)など、他のシェルも開 発された。C シェルは sh の改良版として、カリフォルニア大学バークレー校で開発 され たもので、UNIX のベース言語である C 言語を用いるため、高機能であるが実行速度が遅 いという欠点があった。Korn シェルは AT&T が1988年、 Bourne シェルとCシェル の長所を 取り混ぜ生み出されたものである。また、Bourne シェルに最新の機能を追加し 登場したのが Bourne Again シェル(bash)で、Linux で良く利用されている。 B シェル系 (改良版)bash AT&T 開発系 C シェル系 K シェル (改良版)tcsh バークレー校開発系 シェル・スクリプト 簡単なプログラム例 1.条件分岐(現在時刻に合わせたコメント表示) #! /usr/local/bin/sh/ #! /usr/local/bin/tcsh ① set `date` hour=`echo $2 | cut -c1-2` set d=`date` set hour=`echo $d[2] | cut -c1-2` ② if ( $hour < 12 ) then echo "Good morning!" if [ $hour -le 12 ] then echo "Good morning!" elif [ $hour -le 18 ] then echo "Hello!" else echo "Good evening!" fi exit 0 ③ else if ( $hour < 18 ) then echo "Hello!" else echo "Good evening!" endif ④ exit 0 B シェル例 C シェル例 ①このプログラムを実行するシェルを定義 ②UNIX コマンド’date’の実行結果を、変数に代入。B シェルの場合は特殊変数に代入し たことになる。それぞれ、代入値から不要な文字を取り除いたものを、変数 hour に代 入している。$2 および$d[2]はそれぞれ変数の引数。→特殊変数 ③比較演算子 等しい 異なる より大きい B シェル -eq -ne -gt C シェル == != > 以上 未満 以下 B シェル -ge -lt -le C シェル >= < <= ④それぞれ if 文を fi,endif で閉じている。 実行例:15 時の場合 B シェル例の場合、特殊変数$0 にはスプリクト ファイル名、$1 には「2002 年 09 月 19 日(木)」、 > greeting_b.txt $2 には「15 時 00 分 56 秒 JST」が代入された。 Hello! C シェル例では、変数 d の引数 1,2 にそれぞれ > 同様に値が代入された事になる。 2.ファイルの読み込み・算術(カウンター) #! /usr/local/bin/tcsh C シェル例 set file_name=counter.dat if (-e $file_name) then ① set counter = `cat < $file_name` ② @ counter=$counter + 1 echo $counter"回目のログインです。" ③ rm -f $file_name echo $counter > $file_name ④ else echo "データファイルが存在しません。" endif #実行例: > counter.txt 38 回目のログインです。 > ①ファイルの存在を確認。 -r -w -e 読み出し可能か? 書き込み可能か? 存在しているか? -x -z -s 実行可能か? サイズは0か? サイズは 0 ではないか? ②ファイルが存在する時に、ファイルの内容を変数 counter に代入する。入力リダイレ クション。 ③算術記述:C シェルの場合は @ X=$X + 1、B シェルの場合は expr X=$X + 1 算術記号(+,-,*,/)の前後はスペースが必要。連続している場合は文字列として扱われ ます。 ④計算結果をファイルに書き込む。(ファイルを生成:出力リダイレクション) 入出力リダイレクション コマンドの実行結果を、表示するのではなくファイルに出力するものが出力 リダイレクションで「コマンド > ファイル名」が新規作成、上書きとなり 「コマンド >> ファイル名」が追加書き込みとなる。たとえば「ls > ファ イル名」とすると、リストの結果がファイルに記録される。
© Copyright 2024 ExpyDoc