bashの括弧やコロンについて

ほとんどコマンドとパイプ、リダイレクトで
事足りていたんですが、とあるアプリのビルドのための
スクリプトを書いているときに、ちょっとだけ複雑な
処理が必要で、その際に覚えた記法のまとめです。

bashで利用される様々な記号

[] (bracket)

testコマンドのシンタックスシュガー的なもの。

と等しい。
if文書くときによく利用しますね。

[と]の間にはそれぞれスペースを入れなければ構文エラーになるので
注意が必要です。

オプションはこちら(全部じゃないです。代表的なものだけをあげました)

*. -e ファイルが存在すれば真を返す
*. -d ファイルが存在し、ディレクトリなら真を返す
*. -f ファイルが存在し、ファイルであれば真を返す
*. -s ファイルが存在し、サイズが1以上であれば真を返す
*. -x ファイルが存在し、実行可能であれば真を返す
*. 条件式1 -a 条件式2 条件1,2共に真であれば真を返す(AND)
*. 条件式1 -o 条件式2 条件1.2いずれかが真であれば真を返す(OR)

{} (braces)

コマンドをまとめてカレントシェルで実行する

  1. コマンドをグルーピングしてカレントシェルで実行

グルーピングして実行した内容が、そのまま反映されます。

さらにコロンを利用すると、複数の変数を展開できます。
これを利用して

と出力させることもできます。(ブレース展開)

() (parentheses)

複数のコマンドを1つのコマンドのように実行。
そこはブレースと同じですが、実行はサブシェルで行われる

$ (ドルマーク)

個人的には、これがあまりにも広義に利用されているから
シェルスクリプトは大きくなると、読みづらくなる気がする。

基本的にはPHPで利用されているような変数の前につけるもの、
という認識でよさそうですが、幅広く利用される。

*. $$ 実行シェルのプロセス番号
*. $! 最後に呼び出されたバックグラウンドのプロセス番号
*. $? 最後に同期実行されたコマンドが返した値の10進数
*. $* 全ての引数、ダブルクオートで囲むと、それらを1つの文字列にして展開される
*. $@ 全ての引数、ダブルクオートで囲むと、全ての引数を配列にして展開される

更に、括弧()や中括弧と組み合わせて利用することがある

  1. 変数の展開(中括弧{}を利用)

  1. バッククォートの代替(括弧()を利用)

意味としてはバッククォート指定と同じ(コマンド)
囲まれた部分がコマンドとして評価される。evel的な。

: (コロン)

これも、直感的にはわかりづらいし、覚えてないと使えない。

  • valueA:-valueB valueAが空白ならvalueBの値をvalueAにセットする
  • valueA:+valueB valueAが空白でないならvalueBの値をvalueAにセットする
  • valueA:=valueB valueAが空白なら”valueB”をvalueAにセットする
  • valueA:start valueAのstart文字目から最後までを出力する
  • valueA:start:length valueAのstart文字目からlengthの数だけ文字を出力する。

&&と||

コマンド1 && コマンド2

コマンド1が正常終了したときだけ、コマンド2を実行する

コマンド1 || コマンド2

コマンド1が以上終了した場合は、コマンド2を実行する

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です