シェルスクリプトの文法まとめ-1

シェルスクリプトの簡易的な文法まとめ


・sh(bash)で実行

#!/bin/sh

・コメント

# comment
# ...
# 複数行のコメントは無い
# ...

・複数行に渡る記述

echo \
ABCD\
EFG

>> ABCDEFG

・1行に複数のコマンドを書く

echo "ABCD"; echo "EFG"

>> ABCD
>> EFG

・変数への代入

VAR="ABCDE"

・変数の値の参照

$VAR
${VAR} # 動作はどちらも同じ

・空白を含む変数の値の展開

VAR="AAA BBB"
$VAR # AAA BBB になる。
"$VAR" # "AAA BBB"になる。

この展開の違いは、比較の際などに注意する必要がある。

$AB="AAA BBB"
if [ $AB = "AAA BBB " ] # AAA BBB = "AAA BBB"となりfalse
if [ "$AB" = "AAA BBB " ] # "AAA BBB" = "AAA BBB"となりtrue

・文字列のクォーテーション

echo "\` \\ \" ' \$ \t \n $VAR" # 出力は、` \ " ' $ (tab) (改行) VARの値
echo '` \ " $ \t \n $VAR' # 出力は、` \ " $ (tab) (改行) VARの値
# '...'内部でシングルクォート(')は記述できない

数値計算

A=10
echo 20+$A # 20+10になる
echo $((20+$A)) # 30
echo `expr 20 + $A` # exprの引数として計算するので、演算子の前後に空白が必要

・コマンドの実行結果を得る

echo `date` # バッククオートを使う
echo $(date) # $()を使う

・特殊変数

echo "$0" # スクリプトのファイル名
echo "$1" # 第1引数。$2, $3...もある
echo "$@" # すべての引数のリスト
IFS="," # リストの区切り文字を指定
echo "$*" # 指定された区切り文字で、すべての引数のリスト
echo "$#" # コマンドライン引数の数
echo "$?" # 最後に実行したコマンドの終了ステータス
echo "$$" # シェルスクリプト自身のプロセスID
echo "$!" # バックグラウンドのプロセスのID