シェルスクリプト

シェルスクリプト

More than 1 year has passed since last update.

1行目

#!/bin/sh と書く。これをシバンと呼ぶ。利用するスクリプトの種類を指定
#!/bin/bash でも良いが、bashのない環境だと動かない
シバンがshなのに、bashの機能を使うと、bashのない環境で動かなくなるので注意

実行方法

sh XXX.sh で実行可能
実行権限をシェルに与えれば、./XXX.sh でも実行可能

  • -x:デバッグ情報を出力しながら実行

変数

A=入れたい文字列 でAに値が入る
$A もしくは、${A} で使える

環境変数

元々用意されている変数

  • $HOME:ホームディレクトリのパス

引数

  • \$1、\$2・・・:1番目の引数は\$1、2番目の引数は\$2・・・
  • $#:シェルに渡された引数の数

コマンド置換

コマンド内で別のコマンドを呼べる(サブクエリのようなもの)
$(コマンド) もしくは、`コマンド` で使える
ただ、入れ子を考えると$() 形式を使った方が良い
例えば、$(A$(B)) はOKだけど、`A`B`` だと正しく書けない

if文

if [ 条件文 ]
then
  処理
else
  処理
fi
if [ 条件文 ] ; then 処理; fi

[はコマンドの一種なので、前後に半角スペースが必要

  • A = B:等しい
  • A != B:等しくない
  • A lt B、A gt B:数値比較。<や>と同じ

case文

case 比較対象 in 
  値1) コマンド ;;
  値2) コマンド ;;
esca
  • 値1の部分は、ワイルドカードなどが使える

for文

for 変数名 in コレクション(半角スペース区切り)
do
  処理
done
for 変数名 in コレクション; do 処理; done

while文

while [ 条件式 ]
do
  処理
done
  • continue:ループの最初に戻る
  • break:ループを抜ける

関数

関数名() {
  処理
  return 0
}
  • 引数は、\$1、\$2・・・が使える
  • 関数の終了ステータス(戻り値)は、最後に実行したコマンドの終了ステータスになる
  • 呼び出しは、関数名、のみ。()はいらない

サブシェル

()で囲った範囲は別のシェル上で実行される
カレントディレクトリを変更する時などで有効

四則演算

$(( 計算式 )) で可能

tips

前のコマンドが異常終了したら、中断する

if [ $? != 0 ] ; then exit; fi