Johnman.md

プログラミングのことや個人的なことを書きます。たぶん。

UUIDの大文字と小文字を簡単に出し分けられるシェルスクリプト

概要

仕事でよくUUIDを生成して使うことが多いので、シュッとUUIDを生成できて大文字小文字を簡単に出し分けられるシェルスクリプトが欲しかったので作りました。 コードはGitHubにも置いてあります。

github.com

uuidgenじゃだめなのか

一応、uuidgenコマンドがあるんですがこれにはアルファベットを小文字で出力するようなオプションはなく、常に大文字で出力されます。また、以下のようにコピペして使いたいという時に改行が入ってしまうのが地味に面倒でした。

$ uuidgen | pbcopy

# ペーストすると改行が入る
$ 783B3460-8D6E-4D4A-9E89-4A7C23D0285E
>

これを回避するためにtrコマンドで改行を消したり

$ uuidgen | tr -d '\n'

アルファベットを小文字に変換したりしていました。

$ uuidgen | tr -d '\n' | tr A-Z a-z

さすがに毎回このパイプを書くのは辛いので、シェルスクリプトを書いて一つのコマンドにまとめて、アルファベットはオプションで大文字と小文字を出し分けるようにしました。

uuid4.sh

ぼくはUUIDは小文字で使うことが多いので、デフォルトは小文字で出力して -u オプションで大文字に切り替えるようにしました。

/usr/local/binにシンボリックリンクを置いています。

# デフォルトは小文字で出力
$ uuid4
dc79fc98-2b2a-447d-84f8-3c045a7c3874
$ uuid4 -u
DB217891-D99E-4CDA-8B5F-5F563857A42B

実際に書いたスクリプトです。

#!/bin/bash

PROGRAM=$(basename "$0"); readonly PROGRAM

function usage() {
  cat <<EOS
Usage: $PROGRAM [OPTION]...
  -h, --help Display help
  -u         Generate UUID with uppercase
EOS
}

# 引数がない場合は改行を消し、小文字で出力
if [ $# -eq 0 ]; then
  uuidgen | tr -d '\n' | tr "[:upper:]" "[:lower:]"
  exit 0
fi

for OPT in "$@"; do
  case $OPT in
  -h |--help)
    usage
    exit 1
    ;;
  -u)
    # -uオプションの時は改行だけ消して大文字で出力
    uuidgen | tr -d '\n'
    break
    ;;
  -*)
    echo "$PROGRAM: illegal option -- '$(echo $1 | sed 's/^-*//')'">&2
    exit 1
    ;;
  esac
done

まとめ

これでターミナルでUUIDを生成するのが楽になりそうです。

今後よく使うシェルスクリプトGitHubにまとめていこうかなと思います。