試される大地から

furaiboが送る技術ブログ。プログラミングのTipsなど書いていきます。

Ubuntuの#!/bin/shで詰まった話。

結論から言うと、Ubuntuシェルスクリプトを書くにあたってシバン行を

#!/bin/sh

とすると、bashではなく、dashへのリンクとなってしまう。
以下の記事に書いてあった。


http://siguniang.wordpress.com/2013/05/12/dash-is-not-bash/



文法的に正しいはずなのにシンタックスエラーが出まくって困っていたのだが、そもそもbashの文法で書いたものを別のインタプリタで解釈しているのだから当然の結果であった。Ubuntuでは#!/bin/shbashじゃないのかと突っ込みたいところだが、とにかくシバン行を

#!/bin/bash

と書いてやればOK。CentOSと同じようには行かないのね・・・
ひとまず、Linuxディストリビューションとそのバージョンを判別できる簡単なシェルスクリプトを書くことができた。

#!/bin/bash

# ディストリビューション名とバージョンを取得 
tmp=`cat /etc/issue | head -n 1`
DIST=`echo $tmp | awk '{print $1}'`	# ディストリビューションを取得

# バージョンを特定
if [[ $DIST =~ "CentOS" ]]; then
	VER=`echo $tmp | awk '{print $3}'`
elif [[ $DIST =~ "Ubuntu" ]]; then
	VER=`echo $tmp | awk '{print $2}'`
fi

# 取得した情報を表示
echo "dist : $DIST"
echo "ver : $VER"

今はCentOSUbuntuを区別するだけのスクリプトである。もう少しいろんなディストリビューションを判定できる気の利いたスクリプトにしたい。