最速でBashシェルスクリプトの基礎をマスターしてもらうことを目標にしたチュートリアルです。 以下のような内容を盛り込んだシェルスクリプトを題材に学習します。
これだけ盛り込まれていれば、シェルスクリプトでよく必要になる基本的な事項をかなりカバーできるようになっています。 もちろんそれだけですべてではありませんが、あとは自分で調べながら目的に合ったシェルを作っていくことが出来ると思います。
そもそもシェルスクリプトとはなんでしょうか? 通常コンソールで操作するようなコマンドを実行したい順に記述したテキストファイルです。 テキストファイルに処理を順に記述しておくことで一括で実行することが出来ます。このようなテキストファイルをShellスクリプトと呼びます。
シェルスクリプトを構成するテキストファイルには決まったフォーマットというかお作法があります。 以下が基本のフォーマットです。
#!/bin/bash
(処理の記述)
exit 0
先頭行はこのスクリプトがbashで実行されることを宣言しています。最終行のexitは明示的にスクリプトが完了したことを表しています。
「処理の記述」部分にOSに指示したい内容を書いていくことでシェルプログラミングができます。 もっとも簡単なスクリプトは、以下のように、ただ実行したいコマンドを順に書いただけのものです。
#!/bin/bash
echo "hello world"
echo "bye world"
exit 0
たとえば、上記のechoの部分を以下のように変更するだけで、簡単なバックアップスクリプトが作れます。
こういった一連の処理をまとめてシェルスクリプトにしておくだけで、シェルスクリプト一つ起動するだけで面倒な作業を完了したり、オペレーションミスを減らしたり、といった効果が生まれます。日ごろからよく行う作業などはシェルスクリプト化しておくというのはサーバ運用の基本になります。
本チュートリアルでは以下のスクリプトを題材に進めていきます。
#!/bin/bash
function usage() {
message=`cat <<EOF
About this script:
Backup script for files
Usage:
${0} targent_file_name [backup_file_name]
target_file_name : file to backup
backup_file_name : backup file name
default file_name is date and time based file_name
yyyymmddhhmmss.tgz like 20140101000000.tgz
EOF
`
echo "${message}"
return 0
}
function die() {
if [ $# -eq 1 ] ; then
echo "ERROR : ${1}"
else
echo "ERROR : unknow error"
fi
usage
exit 1
}
if [ $# -lt 1 ]; then
die "missing target file name"
fi
if [ -e $1 ]; then
target_file_name=$1
else
die "target file ${1} that you specified does not exists."
fi
if [ $2 ]; then
if [ -e $2 ]; then
die "backup file ${2} already exists"
else
backup_file_name=$2
fi
else
backup_file_name=`date +%Y%m%d%H%M%S`.tgz
fi
echo -n "backup ${target_file_name} to ${backup_file_name} ? [yes/no] : "
while read confirmation; do
case $confirmation in
'yes' ) tar zcf ${backup_file_name} ${target_file_name}
break ;;
'no' ) echo "stopped operation"
exit 0 ;;
*) echo "unknown option. try again."
echo -n "backup ${target_file_name} to ${backup_file_name} ? [yes/no] : " ;;
esac
done
if [ $? -eq 0 ] ; then
exit 0
else
exit 1
fi
シェルスクリプトのファイル名に特にルールはありませんが、慣習的にxxx.shのように拡張子を.shにして、シェルスクリプトであることを明示することが多いです。 また、シェルスクリプトのファイルには実行するユーザに対する実行権限が必要です。 上記題材のスクリプトをテキストファイルに記載して、実行権限をつけておいて動作を試しながら以降を読み進めてもらえるとよいと思います。