#shell

シェルスクリプト書き始めて苦戦したこと

頼まれた作業が手作業でやるにはあまりに手間だったのでシェルスクリプトに初めて手を出した.
今まで使用した言語との違いで躓いたところを今後のためにメモ書きしていく.

グローバル変数とローカル変数

端末上でグローバル変数を宣言したつもりで

foo=123456

としておきスクリプト上で

sudo mkdir -p /$foo

と書いたところどうも変数が認識されていなかったようなので調べたところ,シェルスクリプトにおいて定義された変数はそのシェルの中でのみ有効ということらしい.端末からアクセスしている親シェルで定義した変数はシェルスクリプトで使用する子シェルでは参照できないそうだ.そのため変数をグローバル変数化するためにはexportコマンドを使用すればよいとのことなので

export foo

としたところ上手く実行できた.

参考サイト

if文

if文の基本的なコマンドについては
シェルスクリプト(bash)のif文とtestコマンド([])自分メモ
を参照に作成.
その際に前提条件のところをよく読んでいなかったためunknown commandのエラーが発生.
単純に
if [ -e $dir ];
のように条件文の両端の括弧と条件文との間に空白が必要なためだった.また,私が知る限りの他言語と違いif[の間にも空白が必要.

他にも上記のグローバル変数化をしたにも関わらず変数が認識されていなかったので何故かよく見てみると

if[! -d ${dir}]; then mkdir -p /$foo; fi
else ...

これは他サイトを参照して実行したが単純に;と変数の間に空白が無かったため起きていたエラーであった.シェルスクリプトでは;も一つの文字として認識されるようなので空白を入れる必要がある.

まとめ

これから随時更新されていくと思います.