LoginSignup
3
1

Bash シェルスクリプト入門 ~SQLの生成を例に~

Last updated at Posted at 2023-12-02

はじめに

BashはAWS EC2など多くのUNIX環境で用いられているシェルの一種で、OSコマンドや制御文で簡易的にプログラミングができる。

普段はPythonやGoで開発をする筆者がテスト用のデータのためにシェルスクリプトから大量のSQL文を生成するプログラムを生成した経験から、シェルスクリプトの入門向けの内容をコードベースで記す。

先頭行について

シェルスクリプトの先頭には以下のコメントのように実行する実行系を指定できる。
この #!から始まる1行目をShebangという。

#!/bin/bash

変数

変数名=値 で変数が使える。

# 変数名=文字列、数値 で代入する
VAR="変数"
NUM=12

# 配列も定義可能
ARRAY=(1 2 3)

# shellコマンドの結果も格納できる
RESULT=`ls`

loop

for 条件;
do
処理
done
とすることでloop処理が可能

# 1から10を $i に代入して繰り返す場合
for (( i=1; i<=10; i++ ));
do
    echo $i
done

# 配列の要素を $i に入れて繰り返す場合
ARRAY=(1 3 5)
for i in "${ARRAY[@]}" ;
do
    echo $i
done

条件分岐

if 条件1; then
条件1がtrueのときの処理
elif 条件2; then
条件2がtrueのときの処理
fi
で条件分岐処理が可能。

# 文字列での比較
STR="hogehoge"

if [ $STR = "hogehoge" ]; then
    echo "STR is hogehoge"
elif [ $STR = "HOGEHOGE" ]; then
    echo "STR is HOGEHOGE"
fi

# 数値での比較
NUM=12

if [ $(( NUM % 2 )) -eq 0 ]; then
    echo "NUM is even"
else
    echo "NUM is odd"
fi

SQLの生成の例

以上の基本から大量のSQLを生成してみる例を作ってみる。

例えば以下のようなテーブルを定義して、FizzBuzz問題の解答を1~50でSQLでインサートする例を考えてみる。
なおデータベースはMySQLとします。

CREATE TABLE `fizzbuzz` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `value` varchar(255) 
);

以下のようなbashとなります。

fizzbuzz.bash
#!/bin/bash
for (( i=1; i<=50; i++));
do
    VALUE=$i
    if [ $(( i % 3 )) -eq 0 -a $(( i % 5 )) -eq 0 ]; then
        VALUE="\"Fizz Buzz\""
    elif [ $(( i % 3 )) -eq 0 ]; then
        VALUE="\"Fizz\""
    elif [ $(( i % 5 )) -eq 0 ]; then
        VALUE="\"Buzz\""
    fi
    echo "INSERT INTO fizzbuzz VALUES ($i, $VALUE);"
done

これを保存し以下のコマンドで50行のSQLが1コマンドで作成できる。

$ bash fizzbuzz.bash > fizzbuzz.sql
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1