がらくたネット


シェルスクリプトのメモメモ

シェルスクリプトのメモメモ

シェルスクリプト関係のメモ、bashね8-)

オプション文字列

引数ではなくてオプションを利用する方法
オプションとはコマンドラインに -a HOGEHOGE などと指定するあれ。

bashには組み込みでgetoptsがあるのでこれを使う

while getopts a:bc _OPT
do
  case $_OPT in
    a ) VALUE_A=$OPTARG ;;
    b ) FLAG_B=true ;;
    c ) FLAG_C=true ;;
  esac
done

コロンがついてるやつは$OPTARGにその引数が入っているので変数に落す
コロンなしのやつはフラグがセットされることになる

これを関数として登録して、親玉から 関数名 $@ とかして呼び出す
このgetoptsだと、a~zの26文字と数字10個がオプション文字列として利用可能だ!

整数演算

exprを使う

  • 整数しか使えない!
  • 掛け算は*(アスタリスク)をクォートする必要がある
    $ expr 10 * 20
    expr: syntax error
    $ expr 10 \* 20
    200

小数演算とか複雑演算

bcを使う

  • echoで計算式を定義してbcにパイプで渡す
    $ echo "0.1 + 0.2" | bc
    .3
    $ echo "0.1 * 0.2" | bc
    0
    $echo "scale=10; 0.1 * 0.2" | bc
    .02
  • bcは小数点を利用したり、論理演算したりできるしとっても便利
    scale=桁  	小数点以下の桁を指定する。初期値は0
    length=桁 	有効桁数を指定する
    length ( 数値 ) 	指定した数値の有効桁数を返す
    scale ( 数値 ) 	指定した数値の小数点以下の桁数を返す
    ibase=基数 	入力の基数を指定する。初期値は10
    obase=基数 	出力の基数を指定する。初期値は10
    last 	最後にbcが出力した値
    ( 式 ) 	括弧内の式を先に計算する
    変数 ++ 	指定した変数に1を足す
    変数 -- 	指定した変数から1を引く
    数値1 + 数値2 	数値1と数値2を足し合わせる
    数値1 - 数値2 	数値1から数値2を引く
    数値1 * 数値2 	数値1と数値2を掛け合わせる
    数値1 / 数値2 	数値1から数値2を割る
    数値1 % 数値2 	数値1から数値2を割った余り
    数値1 ^ 数値2 	数値1の数値2乗
    s ( 数値 ) 	sin (数値はラジアン)
    c ( 数値 ) 	cos (数値はラジアン)
    a ( 数値 ) 	atan (結果の単位はラジアン)
    l ( 数値 ) 	log
    e ( 数値 ) 	exp
    sqrt ( 数値 ) 	指定した数値の平方根を返す
    数値1 == 数値2 	数値1と数値2が等しいなら「1」を返す
    数値1 != 数値2 	数値1と数値2が等しくないなら「1」を返す
    数値1 < 数値2 	数値1が数値2より小さいなら「1」を返す
    数値1 <= 数値2 	数値1が数値2より小さいまたは等しいなら「1」を返す
    数値1 > 数値2 	数値1が数値2より大きいなら「1」を返す
    数値1 >= 数値2 	数値1が数値2より大きいまたは等しいなら「1」を返す
    !式 	式の論理的に反対を返す
    式1 && 式2 	式1と式2が共に真ならば「1」を返す
    式1 || 式2 	式1と式2のいずれかが真ならば「1」を返す
    return ( 戻り値 ) 	関数から戻る
    quit 	bcを終了する
    if (条件式) 	分岐を行う
    while (条件式) 	繰り返しを行う
    for (初期処理;条件;繰り返しごとの処理) 	指定した回数繰り返す

基本

return 指定した返り値 n で関数を終了させます。 n を省略すると、返却ステータスは関数内で最後に実行した コマンドの返却ステータスになります。関数の外側で使われているが、 . (source) コマンドによるスクリプトの実行中である場合、シェルはそのスクリプトの実行を止め、 n またはスクリプト内で最後に実行されたコマンドの終了ステータスをスクリプトの終了ステータスとして返します。関数の外側で . によるスクリプトの実行中以外に使われた場合、返却ステータスは偽となります。

exit ステータス n でシェルを終了させます。 n を省略すると、終了ステータスは最後に実行したコマンドの 終了ステータスとなります。シェルが終了する前には、 EXIT に対するトラップが実行されます。