フリーランスエンジニア向けIT系求人・仕事・案件情報サイト
更新日

【実践編】シェルスクリプト自動化に欠かせない?知っておくべき基本文法をご紹介!

シェルスクリプトは、簡単に言うとUnixコマンドなどを並べて実行することで、いつどんな条件でなんの命令を実行する、ログファイルを書きだす、ファイルコンテンツを読み込む、などの役割を持ちます。

そこでこの記事では、シェルスクリプトにおいて知っておきたい基本文法などをご紹介します。エンジニアの方や、シェルスクリプトを詳しく知りたい方は、ぜひ参考にしてくださいね。

シェルスクリプト自動化には欠かせない基本文法を知ろう!

シェルスクリプトは、if分やcase、while文、パイプなどの制御構文とコマンドを組み合わせて動作する簡単なプログラムのことを指します。
一般的に拡張子のファイルとして保存されて、一度作成すれば何度でも再実行できるという特徴を持ちます。

この記事では、シェルスクリプトの自動化には必要不可欠な基本文法をご紹介します。

シェルスクリプト基本文法−if−

シェルスクリプトのif文は、「if〔条件〕then コマンドfi」で書きます。Ifの後に条件式を書き、条件が合致していればthenからfiまでのコマンドを実行します。
If文の書式は以下のようになります。

If〔条件1〕;then
コマンド1
Fi

もし、条件1に合致する場合、コマンド1を実行しますという意味です。
条件1に合致しない場合でコマンド2を実行したい場合は、elseを使い、以下のようにします。

If〔条件1〕;then
コマンド1
Else
コマンド2
Fi

こちらは、もし条件1に合致する場合コマンド1を実行します、それ以外はコマンド2を実行しますという意味を持ちます。

さらに、分岐を分けたい場合は、elifを使用します。これは、else if の省略です。

If〔条件1〕;then
コマンド1
elif〔条件2〕;then
コマンド2
Else
コマンド3
Fi

こちらは、もし条件1に当てはまるならコマンド1を実行します、それ以外で条件2に当てはまる場合はコマンド2を実行します、それ以外はコマンド3を実行しますという意味です。

シェルスクリプト基本文法−case−

case文はC言語やJava言語のswitch文に該当する制御文で、if文と同様にコマンド実行を分岐するために使われるものです。
基本の書き方は、「case変数in条件・値」コマンド;;esac 」となります。
条件や値が変数と合う場合は、case文は指定した条件・値の複数パターンとのマッチングによって指定したコマンドを実行するのです。
また、単純な分岐条件でコマンド処理が3つ以上ある際はcase文が向いているでしょう。
case文の書式は以下のようになります。

case 値 in
条件・値1)コマンド1;;
条件・値2)コマンド2;;
条件・値3)コマンド3;;
…
条件・値n)コマンドn;;
esac

シェルスクリプト基本文法−for−

for文は、n回数、同じ処理を繰り返すというループ処理という意味を持つ制御文で、for文の書式は以下のようになります。

for 変数 in 値リスト
do
コマンド
done

シェルスクリプト基本文法−while−

while文はループ処理である条件を満たしている間は同じ処理を繰り返すとする制御文です。
while文の書式は以下のようになります。

while 条件式
do
コマンド
done

自動化するために便利なexpect

expectとは、PCなどのマシンからの問いかけに対し、人間がキーをたたいて返答するといった対話を自動化するコマンド及びモジュールのことです。
元は、Tclというプログラミング言語ベースのコマンドで、使い道はscriptと似ています。

expectの使い方

例えば、passwdコマンドの場合、以下はユーザのパスワードを変えるというコマンドですが、必ず対話が発生します。

$ passwd hoge
Changing password for user hoge.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

オプションなどを何もつけずに使用する場合は、このように必ず対話が発生します。

また、sshでも同様になります。

$ ssh 192.168.0.1
The authenticity of host '192.168.0.1 (192.168.0.1)' can't be established.
ECDSA key fingerprint is d3:8f:4f:46:04:2f:ea:5b:ad:fd:bb:c5:7a:35:56:67.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.1' (ECDSA) to the list of known hosts.
root@192.168.0.1's password:
Last login: Tue Jul  7 22:02:08 2015 from 192.168.0.2
$

パスワード認証である場合、どうしてもSSH接続時には対話が必要になります。
認証が一度だけならまだしも、複数のサーバを踏み台にする場合や一台のサーバから複数のサーバの情報を取り入れたい場合などには、パスワード認証だと面倒になるでしょう。

時間や手間もかかってしまいます。そんなときに対話をExpectで自動化すると便利です。

まとめ

シェルスクリプトの基本を覚えると、いろいろなことができるので非常に便利です。
また、シェルスクリプトのパイプ機能を利用すると、一つのコマンドではできないような複雑なタスクも効率的にできるようになります。

簡単なタスクだとしても、一つずつ自動化することで一日の業務がはるかに楽になるでしょう。シェルスクリプトを使用し、まずは単純な作業から着実に自動化し、作業の効率化を目指すと良いですね。

こちらの記事でご紹介した操作に慣れてきたら、ぜひほかの種類のシェルスクリプトにもチャレンジしてみてくださいね。

\ ログインしなくても検討機能が使える♪ /
Linux(OS)の案件を見てみる