🤮
Shellscript(bash) TIPS
想定する読者
- shellscriptをたまに書く方
- shellscript初心者
#!(シェバン)
日本語の記事の多くでは、shellscriptの1行目を以下のように書かれているものが多いかと思います。
#!/bin/bash
これは、/bin/bashにbashがあることが前提になっていて、bashのpathが/bin/bashでないユーザが./shellscript.sh
のように実行した場合、エラーになってしまうため、あまり良くないです。
できれば、#!/usr/bin/env bash
としたほうが望ましいです。
set コマンド
shellのオプションを設定(set)したり、解除(unset)したりします。
書き方としては、set -u
やset -eux
などと書き
不思議ですが、-uでuオプションを設定し、+uでuオプションを解除します。
代表的なところだと
e: コマンドが0以外のステータスコードを返した場合、エラーとなる。
u: 実行したコマンドに定義されていない変数が入っていた場合、エラーとなる。
簡単に説明すると
#!/usr/bin/env bash
set -u
echo $FOO <- エラーとなる
set +u
echo $FOO <- エラーにならず、ターミナルには何も出力されない
if 構文
知らず使っている方がいるかも知れませんが、
以下の[ -z "$FOO" ]
ですが、if構文の機能ではなく、testコマンドを実行しています。
そのため、ググるときは、if オプション
ではなく、testコマンド
で調べたほうが希望の結果がでるかもしれません。
if ! [ -z "$FOO" ]; then
echo "$FOO"
fi
ちなみにtestコマンドの-z
フラグは、引数に渡された変数が空の場合、正
です。
ので上記の場合は、FOOになにか値が入っていた場合、echo $FOO
を実行しています。
$ test -z $FOO <- FOOに何も入っていない場合、正
$ echo $?
0
$ test ! -z $FOO <- FOOに何か入っていた場合、正(!は否定を意味します)
$ echo $?
1
書くのが途中になってしまいましたが、モチベがなくなってしまったので、とりあえず公開だけしておきます。
気が向いたら、付け足します。
Discussion