【ハウツー】
前回は、VMware playerでシェルスクリプト環境を構築する方法を紹介しましたが、本稿では実際にシェルスクリプトを使ってファイル処理を試してみましょう。
VMware playerの環境構築はこちらを参照してください。
必要なコマンドを連ねていくのがシェルスクリプトの基本ですが、それだけでは一本道の単純な作業しかできません。作業の過程で条件分岐を挟み、続く作業を変更することで処理内容を多様化することができます。シェルスクリプトの中で条件分岐させるには「test」というコマンドを用います。
testコマンドの条件分岐にはさまざまなものがありますが、本稿では「-f」というオプションを使います。「test -f <ファイル名>」と入力すると、「ファイル名」が普通のファイルとして存在するかチェックします。「ファイル名」が通常のファイルとして存在すれば「真」、ファイル名と名前がマッチしてもディレクトリであったり、マッチするファイル名がなければ「偽」となります。
Ubuntuに「checkfile」という空のファイルをtouchコマンドで作成し、プロンプトから以下のように入力します。
デスクトップへと移行するにはcd ~/デスクトップと入力します。
user@ubuntu-vm:~/デスクトップ$ touch checkfile
user@ubuntu-vm:~/デスクトップ$ test -f checkfile
「test -f checkfile」は、「checkfile」という名前のファイルが現在のディレクトリにあるかないかを調べています。しかし、プロンプトから入力すると結果は表示されずに戻ってきてしまいます。このtestコマンドの結果を見るには先ほどのechoコマンドを使います。「echo $?」と入力すると、直前に実行したコマンドの結果が表示できます。「$?」は「変数」と呼ばれるもので、「$?」は「直前のコマンドの結果」を意味します。変数は通常のコマンド入力にはほとんど使いません。
ですが、シェルスクリプトでは条件分岐や作業内容に必要な情報を入力するために、ほぼ必須の項目です。身近なところではプロンプトの文字やファイルの特性によって端末での表示色が変わるのは、ログイン時のシェルスクリプトが「環境変数」としてセットされているためです。変数の扱いは状況によって変わるのですが、ここではまだ「セットされた内容を表示するもの」と覚えておけば大丈夫です。
真偽という二択の判定結果では、返り値(コマンドの終了時に出力する値)に「真」(ここではファイルがあれば)は「0」、「偽」(ファイルが存在しない)は「1」を返します。改めて、次のように2つのコマンドを入力すると、echoコマンドの結果が「0」と表示され、テストした結果、checkfileという本物のファイルがある(真)ということがわかります。
user@ubuntu-vm:~/デスクトップ$ test -f checkfile
user@ubuntu-vm:~/デスクトップ$ echo $? ★1
0 ★2
user@ubuntu-vm:~/デスクトップ$
★1:直前のコマンドの結果を表示させる
★2:結果は「真」であると変数「$?」にセットされている
デスクトップ上にはcheckfileという本物のファイルがあります。このtestコマンドの結果は「真」なので、変数「$?」には「0」がセットされ、echoコマンドでそれが表示されています。そこで、checkfileを削除して、同名のサブディレクトリを作成してみましょう。
user@ubuntu-vm:~/デスクトップ$ rm checkfile ★1
user@ubuntu-vm:~/デスクトップ$ mkdir checkfile ★2
user@ubuntu-vm:~/デスクトップ$ test -f checkfile ★3
user@ubuntu-vm:~/デスクトップ$ echo $? ★4
1 ★5
user@ubuntu-vm:~/デスクトップ$
★1:checkfileを削除
★2:checkfileというサブディレクトリを作成
★3:checkfileという名前をテストする
★4:結果を表示させる
★5:結果は「偽」であると変数「$?」にセットされている
今度はマッチする「ファイル」はありましたが、それはサブディレクトリであって、本来のファイルではありません。そのため、testコマンドの結果は「偽」となり、変数「$?」には「1」がセットされるようになります。このように、真の場合は変数「$?」は「0」、偽の場合は「1」がセットされることがわかります。条件分岐はこのような変数にセットされた情報を元に行われます。
【レビュー】新聞のスクラップブック感覚でWebを取り込むソフト - 「ホームページスクラップブック」
【レビュー】重複したブックマークを検索・削除 - Firefoxアドオン「Bookmark Duplicate Detector」
| 【レポート】マカフィーの世界の専門家の意識調査「サイバー防衛報告書」とセキュリティソリューション [21:15 5/25] |
| アップル、Aperture 3.2.4を公開 - バグ修正、安定性向上など [20:51 5/25] |
| 【レポート】GTC 2012 - VGXでエンタープライズ環境でのGPU需要開拓を狙うNVIDIA [20:07 5/25] |
| デル、期間限定キャンペーンに特価アイテム追加、アップグレード無料も継続 [19:41 5/25] |
| 上海問屋、iPhoneとほぼ同じ薄さのバッテリ内蔵ヘッドホンアンプ [19:05 5/25] |
|
エヴァンゲリオンレーシング、今年も鈴鹿8耐出場! 1,000人分の応援席も [00:30 5/27] ライフ |
|
「ガンスリ」10周年で大王付録にヘンリエッタフィギュア [22:22 5/26] ホビー |
|
【特集】クライマックス突入記念! 『Fate/Zero』の舞台裏に迫る!! [22:00 5/26] ホビー |
|
竹宮ゆゆこ×カスカベアキラ「エバーグリーン」1巻刊行 [21:59 5/26] ホビー |
|
最もセクシーな男性「メン・オン・ファイア」21人をAARP誌が発表 [21:30 5/26] エンタメ |