Help us understand the problem. What is going on with this article?

シェルスクリプトの便利な関数

概要

シェルスクリプト(bash)でスクリプトを書く上で利便性の高い関数をまとめました。

CLI

色付きのecho

赤、青、黄の3種類を用意しておくと、エラー、メッセージ、警告と使い分けられます。

エラーなどに使います。

function echo_r () {
    echo -e "\033[1;31m$@\033[0;39m" >&2
    return 0
}

経過表示などに使います。

function echo_b () {
    echo -e "\033[1;36m$@\033[0;39m"
    return 0
}

警告などに使います。

function echo_y () {
    echo -e "\033[0;33m$@\033[0;39m" >&2
    return 0
}

ユーザの存在をチェック

存在するならtrueしないならfalseを返します。

function user_check () {
    if [[ $(getent passwd $1 > /dev/null ; printf $?) = 0 ]]; then
        true
    else
        false
    fi
}

使い方

if user_check hoge; then
    echo "ユーザーhogeは存在しています。"
else
    echo "ユーザーhogeは存在していません。"
fi

補足

コメントで教えてもらいましたが、以下のようにもできるようです。
if文は長くなってしまいますが、全体の行数は減りますね。

if id hoge >/dev/null 2>&1; then
    echo "ユーザーhogeは存在しています。"
else
    echo "ユーザーhogeは存在していません。"
fi

GUI

シェルスクリプトでGUIを扱うにはzenityを使います。
簡単なGUIフロントエンドはこれで十分実装できます。

ウィンドウの基本

下のスクリプトはこれを定義した上で使います。

function window () {
    zenity \
        --title="ウィンドウタイトル" \
        --window-icon="ウィンドウアイコン" \
        $@
}

経過

function info () {
    window \
        --info \
        --width="$1" \
        --height="$2" \
        --text="$3"
}

使い方

info <横幅> <高さ> "文字列" 
info 500 100 "処理が完了しました。"

注意

function warning () {
    window \
        --warning \
        --width="$1" \
        --height="$2" \
        --text="$3"
}

使い方

warning <横幅> <高さ> "文字列" 
warning 500 100 "デバッグモードです。"

エラー

function error () {
    window \
        --error \
        --width="$1" \
        --height="$2" \
        --text="$3"
}

使い方

error <横幅> <高さ> "文字列" 
error 500 100 "エラーが発生しました。"

ローディング

function loading () {
    window \
        --progress \
        --auto-close \
        --pulsate \
        --width="$1" \
        --height="$2" \
        --text="$3"
}

使い方

<コマンド> | loading 500 100 "文字列"
sleep 5 | loading 500 100 "読み込み中です..."
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした