TT Lab
はじめる
学ぶ 学習パス コース

シェルスクリプティング

最初のシェルスクリプトを作る

TT Labで続きを見る

目標

シェルスクリプトの骨格(シバン、実行権限、引数、環境変数、条件分岐、終了コード)を一通り体験します。

なぜ重要なのか

スクリプトは人ではなく、別のプログラムが呼び出します。そのため、出力ストリームと終了コードがインターフェースです。結果はstdout、エラーと使い方はstderr、成功と失敗は終了コードです。この規約を守ってこそ、result=$(script.sh)のような使い方が成り立ち、CIが失敗を検知できます。使い方の案内をstdoutに出した瞬間、それがそのまま結果の値になってしまいます。そして、設定を環境変数で渡し、なければ妥当なデフォルト値で動く形が、デプロイ自動化の標準です。

ステップ

  1. /root/bin/greet.shを作り、1行目を#!/bin/bashにしてください。
  2. そのファイルに実行権限を付けてください。
  3. greet.sh labhubを実行すると、正確にHello, labhub!を出力するようにしてください。
  4. 引数なしで実行するとHello, world!になるように、デフォルト値を入れてください。引数を渡した場合は、引き続きその引数が使われなければなりません。
  5. 環境変数GREETINGが設定されていれば、あいさつをその値に変えてください。GREETING=Hi greet.sh labhubはHi, labhub!、設定がなければHello、GREETING=Yo greet.shはYo, world!になる必要があります。
  6. /root/bin/checkfile.sh <경로>を作ってください。通常ファイルならfile、ディレクトリならdir、存在しなければmissingを出力します(プレースホルダーはパスです)。
  7. /root/bin/grade.sh <점수>を作ってください。90以上はA、80–89はB、70–79はC、それ未満はFです(プレースホルダーは点数です)。
  8. /root/bin/deploy.shを作ってください。環境変数APP_ENVを読み取って、
    • なければ標準エラー出力に案内を出し、終了コード2で終了します
    • prod / stage以外の値なら、終了コード3で終了します
    • prodまたはstageなら、deploying to <값>を出力し(プレースホルダーは値です)、終了コード0で終了します

参考

スクリプトファイルとシバン

/root/bin/greet.shを作り、1行目を#!/bin/bashにしてください。

1行目の#!は、カーネルにこのファイルをどのインタープリターで実行するかを知らせる印です。

実行権限を付ける

そのファイルに実行権限を付けてください。

chmod +xで実行ビットをオンにします。

引数を受け取って出力する

greet.sh labhubを実行すると、正確にHello, labhub!を出力するようにしてください。

最初の位置引数は$1です。カンマと感嘆符の位置まで、正確に合わせる必要があります。

引数のデフォルト値の処理

引数なしで実行するとHello, world!になるように、デフォルト値を入れてください。引数を渡した場合は、引き続きその引数が使われなければなりません。

${1:-デフォルト値}構文を使うと、引数がないときにだけデフォルト値が使われます。引数があれば、そのまま生きている必要があります。

環境変数であいさつを変える

環境変数GREETINGが設定されていれば、あいさつをその値に変えてください。GREETING=Hi greet.sh labhubはHi, labhub!、設定がなければHello、GREETING=Yo greet.shはYo, world!になる必要があります。

環境変数と位置引数の両方に、デフォルト値の処理が必要です。互いに干渉してはいけません。

ファイルの種類を判別する

/root/bin/checkfile.sh <경로>を作ってください。通常ファイルならfile、ディレクトリならdir、存在しなければmissingを出力します(プレースホルダーはパスです)。

-fと-dは、それぞれ通常ファイルとディレクトリを検査します。順序を誤ると、ディレクトリがmissingに入ってしまうことがあります。

点数の等級を付ける

/root/bin/grade.sh <점수>を作ってください。90以上はA、80–89はB、70–79はC、それ未満はFです(プレースホルダーは点数です)。

境界値が罠です。90と89、80と79、70と69を、それぞれ手で確認してください。

環境変数の検証と終了コード

/root/bin/deploy.shを作ってください。環境変数APP_ENVを読み取って、

標準出力と標準エラー出力を区別し、状況ごとに異なる終了コードを返す必要があります。exitの後ろの数字が規約です。