支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡


シェルスクリプトとは

シェルスクリプトというのは、一言でいうとLinuxでファイル内部のテキストに沿ってプログラムを自動実行してくれるファイルです。 プログラムというとプログラミングなどを連想しますが、まさにその通りの内容となっております。if文やwhile文を活用してプログラムを書くことで条件式を成り立たせます。
また、シェルスクリプトの拡張子は「.sh」と表現されがちですが、これは単純にシェルスクリプトとして区別するために付けられるため絶対に必要というわけではありません。運用していく中でシェルスクリプトと見分けられるようにつけられるものとなっています。

事前に知っておきたいこと

シェルスクリプトを作成するにあたって知っておきたいことをまとめてみました。

パーミッションの設定

パーミッションを事前に設定しないことにはファイルを読み取ることも出来ません。予め、umaskコマンドかchmodコマンドを用いて読み取り権を必ず許可しておいてください。 また、実行権を許可することで一定の条件下でbashコマンドを省略化することが出来ます。

実行するための最低条件

シェルスクリプトの代名詞ともいえるのが「#!/usr/bin/bash」の存在です。「#!/usr/bin/bash」を文頭におくことによってシェルスクリプトとして動作してくれます。
実行するコマンドはbashコマンドやsourceコマンドを用います。実行権を許可してある場合に限りファイル名だけでの実行も可能です。

予備知識(エイリアス機能)

こちらは補足としての知識になります。
エイリアスとは、コマンド+オプションに対して別名を付けることでコマンド短縮などを図れる機能です。名付ける場合にはaliasコマンド、解除したい場合にはunaliasコマンドを使用します。

実践

実際にシェルスクリプトを作成してみます。

使用環境

Vitual Box - Linux CentOS7

基本的な書式と設定


$ vi sc    ←ファイル作成+エディタを開く
#!/usr/bin/bash  ←先頭にシェルスクリプトとして読み込まれる表記をおく
echo hello    ←hello
$ chmod 755 sc  ←パーミッションの設定を変更(以降割愛)
$ ./sc      ←ファイル名だけ実行可能
hello 

基本の流れはこのような感じになります。

if条件式+test構文

if条件式は「もし、(条件式)であるとき、条件式に当てはまれば(実行分1)を実行、当てはまらないときは(実行分2)を実行する」といった内容です。

書式:
if 条件式
then
実行文1
else
実行文2
fi

testコマンドはオプションの種類が多くありファイル形式のtestコマンドが次の一覧になります。

testコマンド 説明
-t ファイル ファイルがあれば真
-d ディレクトリ ディレクトリがあれば真
-r ファイル ファイルがあり、読み込み可能であれば真
-w ファイル ファイルがあり、書き込み可能であれば真
-x ファイル ファイルがあり、実行可能であれば真
-L ファイル シンボリックリンクのとき真

#!/usr/bin/bash
if test -f sc    ←testコマンドでファイル名scを検索
then
echo "sc aruyo"  ←ファイル名scがあれば"sc aruyo"が出力
else
echo "sc naiyo"  ←ファイル名scが無ければ"sc naiyo"が出力
fi

$ ls
if      sc      sc.sh  
$ ./if     ←実行
sc aruyo

case条件式

case条件式は式の値に応じた複数の分岐などするときに使われます。ある程度の答えが統一されている場合などcase条件式をオススメします。
書式:
case 式 in
値2) 実行文1 ;;
値2) 実行文2 ;;
~
esac

$ vi case
#!/usr/bin/bash
case $1 in    ←$1は1番目の引数を選択
1) echo "one" ;;  ←引数に1を指定された場合「one」が出力
2) echo "two" ;;  ←引数に2を指定された場合「two」が出力
3) echo "three" ;;
~
esac

$ ./case 2
two
$ ./case 3
three

for文

for文は変数に設定した引数を順次に代入していく処理になります。

書式:
for 変数名 in 変数に代入する値のリスト
do
実行文
done

$ vi for
#!/usr/bin/bash
for var in soccer basket tennis   ←変数varに対して順次soccer,basket,tennisを入力していく
do
echo $var ball  ←設定した引数だけ$varに代入していく

$ ./for     ←実行
soccer ball
basket ball
tennis ball

while文

こちらも繰り返し処理を行う制御構文です。while文の特徴として、条件文が満たされている間は処理が繰り返し行われます。それを止めるためにwhile文ではカウントアップ用の変数を設置して一定の数値を超えると終了させる方式を持ち合わせています。

書式:
while 条件文
do
実行文
done

$ vi while
#!/usr/bin/bash
i=1          ←変数iの初値を設定
while [ $i -le 5 ]     ←変数iが1~5のときは処理を実行する
do
echo $i      ←現在値を報告
let i=i+1      ←1回報告するごとに+1カウントアップされていく
done

$ ./while     ←実行
1
2
3
4
5