シェルスクリプト基本構文備忘録

今までちゃんとシェルスクリプトを勉強したことがなかったのですが
今回仕事で使う機会があったので組みながら勉強してみました。

他のスクリプト言語でも良かったんだけど
覚えたかったのでシェルスクリプトを選択!

勉強した内容を備忘録として下記に残します。

算術演算子

  a=`expr 1 + 1`

exprコマンドで行う。

+ - * / %
a + b a - b a \* b a / b a % b

※乗算の時だけ「\*」のようにエスケープが必要。

比較演算子

= != > <= >~
-eq -ne -gt -lt -ge -le

論理演算子

! and or
! -a -o

if文

通常
if [ $1 -eq $2 ]; then
  echo "="
elif [ $1 -gt $2 ]; then
  echo ">"
else
  echo "other"
fi

thenをifの次の行に置くのが一般的?
2行になるのがどうも馴染めないので「;」を使って1行にまとめて使うことにする。
「[」の後に半角スペースが必要。(嵌った。。)

正規表現
if [[ ${file} =~ .*\.sh$ ]]; then
  処理1
else
  処理2
fi

正規表現の時はカギ括弧2個。

case文

case $1 in
  1) echo "1";;
  2) echo "2";;
  3 | 4) echo "3 or 4";;
  *) echo "other";;
esac

「;;」がbreak。
「*)」がdefault。

for文

通常
for num in 1 2 3 4 5; do
  echo ${num}
done

「for arg in $@; do」で引数を1つずつ処理可能。

ファイル毎に処理
for file in /var/log/*; do
  echo ${file}
  cat ${file}
done

ディレクトリを指定しているところをコマンドにすると色々出来そうです!

while文

通常
while [ ${i} -lt 10 ]; do
  i=`expr ${i} + 1`
done

whileの条件文に戻る場合はcontinueを使う。
途中で抜ける場合はbreakを使う。case文とは異なる。。

ファイルを1行ずつ読み込む
while read line; do
  echo ${line}
done < ${file}

EOFでwhileを抜ける。

標準出力から読み込む
ls | while read file; do
  echo ${file}
done

until文

until [ ${i} -gt 0 ]; do
  i=`expr ${i} - 1`
done

条件のところをコマンドにして、処理のところにsleepを入れれば
正常終了するまでコマンドを繰り返すことが可能。