ka20

Linuxをメインとしたインフラエンジニア(エンジニア歴約15年)

ka20

Linuxをメインとしたインフラエンジニア(エンジニア歴約15年)

マガジン

  • インフラエンジニアが仕事で使えるシェルスクリプトの書き方

    Linuxサーバのインフラエンジニアが、仕事で作るシェルスクリプト(bash)の書き方をまとめました。 サーバの構築設定をするうえで、シェルスクリプトを作る機会は数多く発生します。 サーバの維持運用や保守をおこなううえで、シェルスクリプトに盛り込んだ方が良いポイントをまとめましたので参考にして下さい。

記事一覧

基本的な書き方まとめ

Apacheを停止するシェルスクリプトの場合、実行したいコマンドは下の1行だけです。 # /etc/init.d/httpd stop しかし、サーバを維持保守・運用するうえで、障害時の調査・…

ka20
4年前
3

見出しを書こう

シェルスクリプトの中に「ログに出力」、「プロセス数をチェック」などの処理に見出しを書きます。この一手間が、後から見た時の見やすさをグッと上げます。 記載方法 「#…

ka20
4年前
1

戻り値を付けよう

シェルスクリプトが正常に終了したか、異常終了したかを明確に判断できるように、戻り値を設定します。 正常終了であれば「0」を指定します。 異常終了であれば「1」以上を…

ka20
4年前

インデント文字は統一しよう

if文やfor文、while文など分岐処理やループ処理には、インデント付けて読みやすいシェルスクリプトにします。 インデント文字は半角スペースを4文字や、TABを1文字と決めて…

ka20
4年前
2

ログファイルを作ろう

シェルスクリプトは実行しても、何も記録が残りません。 目的の処理だけをシェルにするのではなく、シェルスクリプトの開始・終了、目的の処理を実行した情報をログファイ…

ka20
4年前
3

変数は上部にまとめよう

スクリプトの中で使う変数は、ヘッダーの直後にまとめて記載します。 スクリプトの中で更新する必要があるものは、必要なポイントで定義します。 記載方法 以下は、筆者が…

ka20
4年前
1

確認処理を入れよう

目的の処理を実行する前に、想定されている状態になっているかを確認する処理を実行します。また、同様に目的の処理を実行した後にも、想定された状態になったかを確認する…

ka20
4年前
2

変数は{}で囲もう

変数の名称は末尾に数字が付くと、1ケタしか認識されません。変数「$HOSTNAME10」は「$HOSTNAME1」として認識されてしまいます。 そのため、変数の名称部分を{}で囲み「${H…

ka20
4年前

ログ出力を統一しよう

ログにはスクリプトを実行した時間と処理内容を記録します。 複数のスクリプトが1つのログファイルに出力する場合でも、どのスクリプトで出力されたわかるようにスクリプト…

ka20
4年前
2

インフラエンジニアが仕事で使えるシェルスクリプトの書き方

マガジンの目的 Linuxサーバのインフラエンジニアが、仕事で作るシェルスクリプト(bash)の書き方をまとめました。 サーバの構築設定をするうえで、シェルスクリプトを作る…

ka20
4年前
2

ヘッダーを書こう

シェルスクリプトの冒頭にはシェルスクリプトの目的や使い方、いつ誰が作成したかなどの情報を記載します。 文字コード違いによる文字化けを防ぐため、簡単な英語で表記す…

ka20
4年前

基本的な書き方まとめ

Apacheを停止するシェルスクリプトの場合、実行したいコマンドは下の1行だけです。
# /etc/init.d/httpd stop
しかし、サーバを維持保守・運用するうえで、障害時の調査・解析のしやすさや他スクリプトへの汎用性も考え、今までの記事にあげてきた項目の対応をおこない、以下のようなシェルスクリプトを作成します。

記載例
$ cat stop_apache.sh
#!/bin/bas

もっとみる

見出しを書こう

シェルスクリプトの中に「ログに出力」、「プロセス数をチェック」などの処理に見出しを書きます。この一手間が、後から見た時の見やすさをグッと上げます。

記載方法
「#」でコメントして概要を記載した1文を加えます。
例1)
### output start log
TIME=`date +"%Y/%m/%d %H:%M:%S"`
echo ${TIME} ${HOSTNAME} ${BASENAME}

もっとみる

戻り値を付けよう

シェルスクリプトが正常に終了したか、異常終了したかを明確に判断できるように、戻り値を設定します。
正常終了であれば「0」を指定します。
異常終了であれば「1」以上を指定します。

記載方法
シェルスクリプトの終了時の「exit」コマンドに引数で「0」や「1」を付けます。
例1)exit 1
例2)FLG=1 ; exit ${FLG}

記載例
$ cat stop_apache.sh
#!/bi

もっとみる

インデント文字は統一しよう

if文やfor文、while文など分岐処理やループ処理には、インデント付けて読みやすいシェルスクリプトにします。
インデント文字は半角スペースを4文字や、TABを1文字と決めてスクリプト内は統一します。
筆者の好みは半角スペース4文字です。

記載例
$ cat stop_apache.sh
#!/bin/bash
#########################################

もっとみる

ログファイルを作ろう

シェルスクリプトは実行しても、何も記録が残りません。
目的の処理だけをシェルにするのではなく、シェルスクリプトの開始・終了、目的の処理を実行した情報をログファイルに記録します。

記載方法
以下のようにログファイルにメッセージを出力します。
LOGFILE=log_file.log
echo script start >> $LOGFILE
echo Apache stoped >> $LOGFI

もっとみる

変数は上部にまとめよう

スクリプトの中で使う変数は、ヘッダーの直後にまとめて記載します。
スクリプトの中で更新する必要があるものは、必要なポイントで定義します。

記載方法
以下は、筆者がよく使う変数です。
HOSTNAME=`uname -n`
   ・・・ホスト名
BASEDIR="$(cd $(dirname $0) && pwd)"
   ・・・本スクリプトが配置されているディレクトリパス
BASENAME=${

もっとみる

確認処理を入れよう

目的の処理を実行する前に、想定されている状態になっているかを確認する処理を実行します。また、同様に目的の処理を実行した後にも、想定された状態になったかを確認する処理を実行します。

記載方法
Apacheを停止するシェルスクリプトの場合、Apache停止処理の前後にApacheが起動状態・停止状態であることを確認します。
Apache(httpd)のプロセス数を数え、プロセス数が0個であれば停止中

もっとみる

変数は{}で囲もう

変数の名称は末尾に数字が付くと、1ケタしか認識されません。変数「$HOSTNAME10」は「$HOSTNAME1」として認識されてしまいます。
そのため、変数の名称部分を{}で囲み「${HOSTNAME10}」と記載することで、誤認識を防ぎます。
合わせて変数名称は大文字に統一し、変数ということを認識しやすくします。

記載方法
・シェルスクリプト内のすべての変数を、以下の様に英字部分を{}で囲み

もっとみる

ログ出力を統一しよう

ログにはスクリプトを実行した時間と処理内容を記録します。
複数のスクリプトが1つのログファイルに出力する場合でも、どのスクリプトで出力されたわかるようにスクリプト名をログに記録します。
複数のサーバが1つのログファイルに出力する場合でも、どのサーバで出力されたわかるようにホスト名をログに記録します。
情報なのか、エラーなのかを識別するフラグを付けて、ログ概要が一目でわかるようにします。

記録方法

もっとみる

インフラエンジニアが仕事で使えるシェルスクリプトの書き方

マガジンの目的
Linuxサーバのインフラエンジニアが、仕事で作るシェルスクリプト(bash)の書き方をまとめました。
サーバの構築設定をするうえで、シェルスクリプトを作る機会は数多く発生します。
サーバの維持運用や保守をおこなううえで、シェルスクリプトに盛り込んだ方が良いポイントをまとめましたので参考にして下さい。

基本的な書き方
下のApacheを停止させるスクリプト「stop_apache

もっとみる

ヘッダーを書こう

シェルスクリプトの冒頭にはシェルスクリプトの目的や使い方、いつ誰が作成したかなどの情報を記載します。
文字コード違いによる文字化けを防ぐため、簡単な英語で表記することをおすすめします。

記載項目
ヘッダーには以下の項目を記載します。
 ・スクリプト名
 ・スクリプトの説明(概要)
 ・使い方、実行方法
 ・作成日
 ・作成者

記載例
$ cat stop_apache.sh
#!/bin/ba

もっとみる