読者です 読者をやめる 読者になる 読者になる

技術関連の覚書

案件でやったり自宅で試したことの覚書、自宅Redmineから移行

環境表示

こちらの記事を元に作って見ました。 環境設定がないとやはり再現できない原因がわからないなど困ることがありますね。

dev.classmethod.jp

検証環境

  • CPU Intel® Core™ i5-2500 CPU @ 3.30GHz
  • MEMORY 16318172 kB
  • DISTRIBUTION Ubuntu
  • RELEASE VER 16.04
  • CODE NAME xenial
  • KERNEL GNU/Linux

これだけだとただ書き写しただけなのでちょい足ししました。

  • 関数を使って2通りの出力内容にした

  • 出力オプションで-l:リスト形式、-t:テーブル形式で出力(getoptsを使用)

  • オプション違いはusageを出力

getoptsはbashのビルトインコマンドでコマンドライン引数を指定した変数に順次格納していくコマンドです。 書式は

getopts オプション文字の羅列 格納する変数

今回は-lと-tなのでオプション文字に「lt」と書きました。 値を設定するオプションの場合は:(コロン)を後ろにつけると変数OPTARGに値が保持されるので、値付きの場合はコロンをつけます。 例) -f table などとしたい場合 getopts f: OPT にすると、OPTにfが入った時に、OPTARGにtableが設定されます。

ファイル内容はこうなりました 当方Ubuntuなのでコマンドとかはちょっと変わります。

#!/bin/bash

# 環境取得
DIST_FILE="/etc/lsb-release"
MACHINE=$(uname -m)
CPU=$(grep "model name" /proc/cpuinfo|head -1)
MEM=$(grep "MemTotal" /proc/meminfo)
DISTRIB=$(grep DISTRIB_ID $DIST_FILE)
OS_VER=$(grep DISTRIB_RELEASE $DIST_FILE)
OS_NAME=$(grep DISTRIB_CODENAME $DIST_FILE)
KERNEL_VER=$(uname -o)

# MarkDown 形式で出力
# リスト形式
list() {
echo "- CPU ${CPU##*:}"
echo "- MEMORY ${MEM##*:}"
echo "- DISTRIBUTION ${DISTRIB#*=}"
echo "- RELEASE VER ${OS_VER#*=}"
echo "- CODE NAME ${OS_NAME#*=}"
echo "- KERNEL $KERNEL_VER"
}

# テーブル形式
table() {
echo "|カテゴリ|スペック|"
echo "|:-|:-|"
echo "|DISTRIBUTION|${DISTRIB#*=}|"
echo "|RELEASE VER|${OS_VER#*=}|"
echo "|CODE NAME|${OS_NAME#*=}|"
echo "|KERNEL|$KERNEL_VER|"
}

# usage
usage() {
   echo "usage:"
   echo "$0 [-l|-t]"
   echo "-l:list / -t:table"
}

if [ $# -ne 1 ]; then
   usage
   exit -1
fi

echo "#### 検証環境"
echo ""

while getopts lt OPT
do
    case $OPT in
    "l")
      list;;
    "t")
      table;;
    *)
      usage;;
    esac
done

-tの時の出力

検証環境

カテゴリ スペック
CPU Intel® Core™ i5-2500 CPU @ 3.30GHz
MEMORY 16318172 kB
DISTRIBUTION Ubuntu
RELEASE VER 16.04
CODE NAME xenial
KERNEL GNU/Linux