| トップ | 読書感想文 | ニュース | Ukki |
shメモ

test -n

引数の文字列長がゼロのとき1を返す。それ以外の場合は0を返す。

test -n ''; echo $?
=> 1

test -n 'hello'; echo $?
=> 0

set -e

実行したコマンドが0以外の戻り値を返した場合、シェルスクリプトを終了する。

set -e

cmd_a
cmd_b
cmd_c
コマンドcmd_bが終了コード1を返した場合、cmd_cは実行される前にシェルスクリプトが終了する。エラーチェックを書かなくてよくなるが、エラーメッセージ表示などのエラーハンドリングはできない。

shift

コマンドライン引数を左向きにシフトする。先頭のやつは消えてしまう。

echo 'all $*:' $*
shift
echo 'all $*:' $*
実行結果
% sh ~/tz/sh/shift.sh a b c d e
all $*: a b c d e
all $*: b c d e

${parameter:=word}

これはShell Paramter Expansionで、:=を使うものは、パラメータparameterが設定されていない時にのみ、wordを値として設定するというもの。

${A:=hello}

の場合、シェル変数Aにhelloが入る。ただし、このとき、:=の右側に書かれたものは展開され実行されてしまう。helloコマンドがない場合にはエラーとなる。helloが実行されないようにするには:コマンドを使う。

: ${parameter:=word}


#!/bin/bash
: ${A:=hello}
echo $A

: ${A:=world}
echo $A
実行結果
hello
hello
最初の${A:=hello}では、Aに値が設定されていないので、helloが代入される。
2度目の${A:=world}ではAにhelloが入っているので何も起こらないため、echoコマンドの行では、そのままhelloが表示される。

:コマンド

:コマンドは、bashのビルトインコマンドの1つ。説明には、
Do nothing beyond expanding arguments and performing redirectoins.  The return status is zero.
と書いてある。つまり、${parameter:=word}の場合のwordのようにコマンド実行をして欲しくない場合にこれを使えば良い。

: ${parameter:=word}

Top
Index
Search on Ukki

login

Sections:
test -n
set -e
shift
${parameter:=word}
:コマンド