それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

bashの条件判断の関数名を美しくする

Bashの関数名に?を使う

bash の関数名には ? が使えます。つまりまぁまぁ美しい関数名が作れます

if の中が美しくない例

# sf-pwgenが存在したら alias をいれる
if type  sf-pwgen > /dev/null  2>&1  ; then 
        alias sf-pwgen-alphanum-12char="sf-pwgen -a alphanumeric -l 12 -c 1"
        alias sfpwgen="sf-pwgen -a alphanumeric -l 12 -c 1"
fi 

関数を使うべき

if の条件文の箇所は、ひと目見てわかりやすい関数名にするべきだと思う。

関数にする。
function cmd_is_exists {
  type "$1"  > /dev/null  2>&1
  return $?
}
if cmd_is_exists sf-pwgen ; then 
  alias sf-pwgen-alphanum-12char="sf-pwgen -a alphanumeric -l 12 -c 1"
  alias sfpwgen="sf-pwgen -a alphanumeric -l 12 -c 1"
fi 

条件文だとひと目で分かる関数名にする。

? を関数の名前に使えるので、これをもう少しわかりやすい関数名にすることが出来る。

function cmd_exists? {
  type "$1"  > /dev/null  2>&1
}

よく使いそうなものも関数にしておくと便利

たとえば、数字かどうかのチェック

function is_int?  {
  [[ $1 =~ ^-?[0-9]+$ ]]
}

たとえば、bash の文字列の変数置換も書式を覚えづらいので関数にしておくとか

function upcase {  echo ${@^^}; }
function downcase {  echo ${@,,}; }
function Capitalize {  echo ${@^}; }

たとえば、LinuxOSXか判別し、同じbashrcを使いまわせるようにするなど。

function is_osx? {
    plat_name=$(uname -a )
    plat_name=$(downcase $plat_name)
    [[ $plat_name == darwin* ]]
}
function is_linux? {
    plat_name=$(uname -a )
    plat_name=$(downcase $plat_name)
    [[ $plat_name == linux* ]]
}

if is_osx?  ; then
   source ~/.bashrc.osx
elif is_linux?; then 
   source ~/.bashrc.linux
fi 

このように、関数とその名前を上手に使える。記号だらけで読みにくいシェルスクリプトだって、工夫次第でかなり読みやすいコードになると思う。

参考資料

https://github.com/azet/community_bash_style_guide