シェルでifの結果を一行で確認する方法
最近シェルでif文を一行(oneliner)でささっと確認したいことがあった。ググるけど、いろいろ情報が分散してたみたいなので分かりやすそうなのを書いておく。
例として、いくつか出してみる。
#正規表現 使用しているOSが64bitかどうか [[ `uname -m` =~ x86_64 ]]; echo $? # 0(true) or 1(false) #数値の比較 [[ `expr 1 + 3` -eq 4]]; echo $? # -> 0
これで0の時に真で、1の時が偽になるので、簡単に実行結果の確認ができる。1行で書けるとファイルを作らずに実行結果を確認ができるので良い。
ちなみにexprって一体なんだろうという人もいるかもしれませんが、shell scirptでは1+3は文字列になってしまうので、exprで数値計算として解釈させないといけないです。
端末の方でif-else、if-elif-elseの確認もできる。
#一行if-else (if-elseなし) [[ `uname -m` =~ x86_64 ]] && echo "match" || echo "unmatch" #一行if-else(if-elseあり) if [[ `uname -m` =~ x86_64 ]];then echo "match"; else echo "unmatch"; fi # 一行if-elif-else if [[ `uname -m` =~ x86_64 ]]; then echo "x86_64"; elif [[ `uname -m` =~ i686 ]]; then echo "i686"; else echo "unmatch"; fi
ところで、1行のことはone line、single lineと二つ呼び方があるのだけど、どっちが正解なのだろう。
調べてみると
one line | 一行 |
single line | 単一行、単線、一行 |
どっちもかわらないみたい。好きな方を使えばいいということなんだろうか。
今回のことで学んだことは参考リンクの方にいろいろ載ってる。$? とか [ ] と [ [ ] ]の違いとか。