- 「これ知らなきゃ分からないだろ!」
- 「エラーの原因はわかったけど、なんか腑に落ちない」
- いま悩んだ2時間返せ!
bashというか、UNIXのコマンドに慣れてない
僕みたいな新人エンジニアが
気をつけた方がいいポイントまとめました。
#あいことばをわすれない
微妙にエラーが出ないため、気づかないまま進んでしまい、
のちのち絶妙に致命的なことになってしまうので注意。
#!/bin/bash
set -Ceu
一行目忘れて2時間悩みました
二行目のオプションつけなかったため2時間悩みました
setのオプションはお好みで
あいことばの解説:
http://qiita.com/magicant/items/f3554274ee500bddaca8
#半角スペースをつけるな!半角スペースをつけろ!
shellさんはスペースに非常に神経質です。
よくある変数代入では=の前後にスペースいれてはダメです。
val=1
これだけで1時間悩みました
また、if文とかで使うカッコの前後、
if [ $val -eq 0 ];then
echo ok
fi
こっちはスペースが無いとエラーでます。
1時間ほど悩みました
ほか、ドットもスペース有り無しで違います。
#カレントディレクトリにあるhoge.shを(別Shell立ち上げて)実行する
./hoge.sh
#ルートにあるhoge.shを、カレントシェルで実行する。(ドットコマンド)
. /hoge.sh
は全く違う。
こんなの初見殺し以外なんでもない。
2時間は悩みました
#カッコやクオートのとじ忘れはあさっての行数でエラーでる。
40行目で閉じ忘れたのに
エラーは105行目で発生とかザラ。
超単純なシンタックスエラーでも
15分くらい悩めます。
#引数を全部表示する$*と$@
ダブルクオートで囲ったとき挙動が違います。
2時間悩みました。
#!もやばいです。
まだ悩んだことないけど、
恐ろしい。
#まとめ
あれ? Shellcheck でいいんじゃね?
https://www.shellcheck.net/
###使い方
例えば以下を、Shellcheckにつっこみます。
#!/bin/bash
set -Ceu
val=1
if [ val -eq 0 ];then
echo ok
fi
すると
6行目のvalに"$"を忘れたので怒ってくれます。
便利!