在bash下初始化sqlite舍不得删

#!/bin/bash
set -euo pipefail  #

check_db() {
    if [[ -f "$DB_FILE" ]]; then
        echo "[INFO] database: $DB_FILE check ok"
    else
        echo "[ERROR] database: $DB_FILE check failed" >&2
        exit 1
    fi
}


table_port_traffic_usage() {
    local action="$1"
    check_db
    local table="port_traffic_usage"
    case "$action" in
        create)
            echo "[INFO] Creating table: $table"

            sqlite3 "$DB_FILE" <<EOF
CREATE TABLE IF NOT EXISTS $table (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    ts INTEGER NOT NULL,
    port INTEGER NOT NULL,
    tx_count REAL,
    rx_count REAL
);
EOF
            sqlite3 "$DB_FILE" <<EOF
CREATE INDEX IF NOT EXISTS idx_ts_$table
ON $table (ts);
EOF

            echo "[OK] $table table created."
            ;;
        delete)
            echo "[INFO] Dropping table: $table"
            sqlite3 "$DB_FILE" "DROP TABLE IF EXISTS $table;"
            echo "[OK] $table table deleted."
            ;;
        *)
            echo "Usage: $0 {create|delete}"
            return 1
            ;;
    esac
}

table_port_limit_record() {
    local action="$1"
    check_db
    local table="port_limit_record"
    case "$action" in
        create)
            echo "[INFO] Creating table: $table"

            sqlite3 "$DB_FILE" <<EOF
CREATE TABLE IF NOT EXISTS $table (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    ts INTEGER NOT NULL,
    port INTEGER NOT NULL,
    traffic_when_limit REAL NOT NULL CHECK (traffic_when_limit > 0)
);
EOF
            sqlite3 "$DB_FILE" <<EOF
CREATE INDEX IF NOT EXISTS idx_ts_$table
ON $table (ts);
EOF

            echo "[OK] $table table created."
            ;;
        delete)
            echo "[INFO] Dropping table: $table"
            sqlite3 "$DB_FILE" "DROP TABLE IF EXISTS $table;"
            echo "[OK] $table table deleted."
            ;;
        *)
            echo "Usage: $0 {create|delete}"
            return 1
            ;;
    esac
}

table_port_limit_station() {
    local action="$1"
    check_db
    local table="port_limit_station"
    case "$action" in
        create)
            echo "[INFO] Creating table: $table"

            sqlite3 "$DB_FILE" <<EOF
CREATE TABLE IF NOT EXISTS $table (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    ts INTEGER NOT NULL,
    port INTEGER NOT NULL UNIQUE
);
EOF
            sqlite3 "$DB_FILE" <<EOF
CREATE INDEX IF NOT EXISTS idx_ts_$table
ON $table (ts);
EOF

            echo "[OK] $table table created."
            ;;
        delete)
            echo "[INFO] Dropping table: $table"
            sqlite3 "$DB_FILE" "DROP TABLE IF EXISTS $table;"
            echo "[OK] $table table deleted."
            ;;
        *)
            echo "Usage: $0 {create|delete}"
            return 1
            ;;
    esac
}




init_db() {

    sqlite3 "$DB_FILE" "VACUUM;"
    table_port_traffic_usage create
    table_port_limit_record create
    table_port_limit_station create
}

destroy_db() {
    table_port_traffic_usage delete
    table_port_limit_record delete
    table_port_limit_station delete
    rm -f "$DB_FILE"
}

handle_db(){
    local flag=$1
    case "$flag" in
        init)
            init_db
            echo "[OK] database initialized."
            ;;
        destroy)
            destroy_db
            echo "[OK] database destroyed."
            ;;
        *)
            echo "Usage: $0 {init|destroy}"
            exit 1
            ;;
    esac

}


if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
    DB_FILE="./test.db"
    handle $1 
fi

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值