Jump to content 日本-日本語

製品  >  ソフトウェア  >  HP-UX   >  Knowledge-on-Demand  >  UNIXの教科書 応用編

UNIXの教科書 応用編
〜はじめよう! WindowsとLinuxからのステップアップ〜

第7日目:シェルスクリプトでより便利に

HP-UX/Integrityサーバー お問い合せ
コンテンツに進む
第7日目:シェルスクリプトでより便利に
7回にわたってお送りしてきた応用編も、最終回となりました。今月はシェルを利用したプログラムであるシェルスクリプトについて学びます。プログラムといっても難しく考える必要はありません。まずは、よく使う処理をファイルに保存しておいてコマンドとして呼び出せるようにしてみましょう。シンプルなシェルスクリプトの書き方から始めて、今日の授業の終わりにはファイルの拡張子をまとめて変換するシェルスクリプトを作成できるようになります。
UNIXの教科書 応用編〜はじめよう!WindowsとLinuxからのステップアップ〜 7日目
シェルスクリプトの基礎知識
シェルスクリプトの活用例
2009年4月
大津 真

UNIXの教科書:登場人物紹介 このリンクをクリックすると、新しいウィンドウが開きます

マリー先生
マリー先生:
「UNIXの教科書」応用編も今日が最後。みんなよくがんばったわね。今回は、シェルを使用したプログラムである「シェルスクリプト」の基本について説明しましょう。その前に、前回のシェルの環境設定に関してなにか質問ありますか?
タックス君:
えーと、スペースや特殊文字の働きを打ち消すのにクォーティングをしましたが、シングルクォーテーション「'」と、ダブルクォーテーション「"」って違いはあるのですか?
タックス君
マリー先生
マリー先生:
まず、シングルクォーテーション「'」とダブルクォーテーション「"」のどちらかを内部に含む場合には、逆のクォーテーションでクォーティングするの。たとえば、シングルクォーテーション「'」を内部に含む「I'm happy」を変数「myPhrase」に代入するには、ダブルクォーテーション「"」でクォーティングして次のようにすればいいわけ。

$ myPhrase="I'm happy"

あと、クォーティングの強さも違うの。シングルクォーテーション「'」のほうが強力で、すべての特殊文字が文字そのものとして扱われる。それに対して、ダブルクォーテーション「"」は変数などの一部の特殊文字が展開されるの。
次の例を見て理解してね。


$ val="guitar"	←変数「val」に「guitar」を代入
$ echo "This is a $val"	←ダブルクォーテーション「"」でクォーティング
This is a guitar	←変数が展開される
$ echo 'This is a $val'	←シングルクォーテーション「'」でクォーティング
This is a $val	←「$」が文字そのものとして扱われる

今日の時間割 シェルスクリプトの基礎知識 シェルスクリプトの活用例 練習問題

1時間目:シェルスクリプトの基礎知識

シェルは、ユーザーインターフェースであると同時に、シェルスクリプトを作成するためのプログラム言語でもあります。プログラムというと尻込みする方もいるかもしれませんが、最初から複雑なものを作る必要はありません。単に、よく使う処理をファイルに保存しておいてコマンドとして呼び出せるようにするだけで、日常の操作がより便利に行えるようになります。まず、1時間目では、テキストファイルにシンプルなシェルのコマンドを記述して、それをコマンドファイルにする手順について説明します。


コマンドをファイルに保存する。

例として、「~/Documentsディレクトリ以下で、ここ1週間のうちに更新されたファイルの一覧を、カレントディレクトリの下の「newFile.txt」というテキストファイルに保存する」という処理をシェルスクリプトにしてみましょう。「newFile.txt」の先頭には、その時点の日付時刻を記述するものとします。
処理の流れとしては、dateコマンドとfindコマンドを順に実行すればよいでしょう。まずは、次のようにコマンドを実行して確認してみましょう。

$ date > newFile.txt ←日付時刻を保存
$ find ~/Documents -mtime -7 -type f >> newFile.txt ←検索結果を保存
$ cat newFile.txt ←作成されたファイルを確認
Wed Feb 18 14:58:57 JST 2009
/home/o2/Documents/sample/ok.info
/home/o2/Documents/mail.txt
/home/o2/Documents/info.txt

四色君:
「>」と「>>」の違いってなんでしたっけ?
四色君
マリー先生
マリー先生:
どちらも出力のリダイレクションだけど、「>」はファイルが存在すると上書きしてしまうのに対して、「>>」は結果をファイルの最後に追加するの。

次に、以下の2つのコマンドを1行にひとつずつ記述したテキストファイルを作成します。とりあえず、カレントディレクトリに「listFile」という名前で保存してください。

date > newFile.txt
find ~/Documents -mtime -7 -type f  >> newFile.txt

シェルスクリプトを実行する

シェルスクリプトを実行するには、シェルの引数にファイルのパスを指定します。HP-UXではPOSIXシェルの場合コマンド名は「sh」になるため、次のような書式となります。

sh ファイルのパス

したがって、前述の「listFile」がカレントディレクトリにある場合、それを実行するには次のようにします。

$ sh listFile

タックス君:
POSIXシェルのshコマンドってどこに保存されているのでしたっけ?
タックス君
マリー先生
マリー先生:
次のようにwhichコマンドを実行すれば、絶対パスがわかるわよ。

$ which sh
/usr/bin/sh

コマンドとして実行できるようにする

この状態では、作成したシェルスクリプトを実行するためには、shコマンドの引数にファイルのパスを指定しなければなりません。続いて、「ファイルのパス 【Enter】」だけで実行できるようにしてみましょう。

まず、シェルスクリプト・ファイルの先頭に次の形式でコマンドのパスを指定します。

#!実行するプログラムのパス

POSIXシェルの場合、絶対パスは「/usr/bin/sh」になるため、次の行を「listFile」に加えます。

#!/usr/bin/sh

次に、chmodコマンドを実行して「listFile」に実行権を加えます。

$ chmod u+x listFile

タックス君:
chmodコマンドの最初の引数「u+x」ってなんですか?
タックス君
マリー先生
マリー先生:
「x」は「eXecute」(実行)の意味で、「u+x」でユーザーに実行権を与えるの、「ls -l」コマンドで表示すると「x」が表示されているはずよ。

$ ls -l listFile
-rwxr-----   1 o2         users           84 Feb 18 15:04 listFile

これで、シェルスクリプトのパスを指定して実行できるようになります。たとえば、カレントディレクトリにある「listFile」を実行するには次のようにします。

$ listFile

四色君:
僕のところでは、これを実行すると「not found.」というエラーになるんですけど……。
四色君
マリー先生
マリー先生:
システムによっては、安全のために環境変数PATHにカレントディレクトリ「.」が入っていない場合があるの。その場合、次のようにしてカレントディレクトリ「.」からの相対パスで「listFile」を指定してね。

$ ./listFile

スクリプト言語について

「シェルスクリプト」の「スクリプト」には映画や演劇の台本といった意味がありますが、プログラムの世界では比較的に小規模なプログラムといった意味でも使用されます。スクリプトを作成するのに適した言語のことを「スクリプト言語」と呼びます。多くのスクリプト言語は、ソースプログラムを実行時に機械語に翻訳していく「インタープリター方式」で実行されます。
以下に、代表的なスクリプト言語をいくつか紹介します。

言語 説明
Perl テキスト処理に優れたスクリプト言語の代表的な存在
Ruby まつもとゆきひろ氏により開発されたオブジェクト指向のスクリプト言語
PHP HTMLに埋め込んで使用するWebアプリケーション開発用スクリプト言語
JavaScript Webブラウザー上で実行される言語

連載記事一覧 1  |  2 次のページへ

本ページの内容は執筆時の情報に基づいており、異なる場合があります。

お問い合わせ

ご購入前のお問い合わせ


ご購入後のお問い合わせ

HPEサポートセンター
製品の標準保証でご利用いただける無償のサービスです。

ショールーム

ショールーム 導入をご検討のお客様へ
業務アプリケーションの継続・標準化・開発性とシステム担当者様、システム開発者様が抱える悩み・疑問に対する解決策実体験して頂けます。
印刷用画面へ
プライバシー ご利用条件・免責事項