作成したコード
ターミナルから意地でも離れないマンなので、ターミナル上からbitbucketを一発で開きたい…!
という思いで作成したコマンド。
bit [リポジトリ名] //指定したリポジトリのページを開く (e.g.)bit hoge
まず成功例
.zshrc
alias bit="open_bitbucket"
function open_bitbucket() {
sh open_bitbucket.sh $1
}
open_bitbucket.sh
#!/bin/bash
if [ "$1" = "hoge-repository" ]; then
open "hoge-repositoryへのURL"
elif [ "$1" = "fuga-repository" ]; then
open "fuga-repositoryへのURL"
fi
【失敗例1】 [hoge: command not found
これはシェルを全く知らない僕がまず初めに詰んだポイントです。
↓のように書くとこのエラーが発生します。
open_bitbucket.sh
#!/bin/bash
if ["$1" = "hoge-repository"]; then
open "hoge-repositoryへのURL"
elif ["$1" = "fuga-repository"]; then
open "fuga-repositoryへのURL"
fi
原因はカッコ[]の中にスペースが含まれていないことでした。
シェルでの[]
は条件を判定するtestコマンドの別の書き方で、if文に限らず条件式を[]
で書くときはカッコ内の前後にスペースを入れる必要があります。
open_bitbucket.sh
#!/bin/bash
if ["$1" = "hoge-repository"]; then #こうじゃなく
if [ "$1" = "hoge-repository" ]; then #こう
【失敗例2】 [: hoge: integer expression expected
これは、失敗例1で悩みながら色々調べてコードを変更した末にたどり着いた第2のハマりポイントでした。
コードは以下の通りです。
open_bitbucket.sh
#!/bin/bash
if [ "$1" -eq "hoge-repository" ]; then
open "hoge-repositoryへのURL"
elif [ "$1" -eq "fuga-repository" ]; then
open "fuga-repositoryへのURL"
fi
-eq
という演算子を使っていることが原因っぽかったです。
ど初心者なのでこんなことも知らなくて恥ずかしいのですが、-eq
は数値の比較にしか使えないみたいですね…
[参考]http://itdoc.hitachi.co.jp/manuals/3020/30203S3530/JPAS0134.HTM
ということで、下記のように修正します。
open_bitbucket.sh
#!/bin/bash
if [ "$1" -eq "hoge-repository" ]; then #こうじゃなく
if [ "$1" = "hoge-repository" ]; then #こう
まとめ
シェルの文法は独特で慣れるまで大変そうですが、Vimmerの私としてはぜひとも慣れておきたいなと思いました。
頑張って勉強します。