6.1 基本構文
Shell Script Basics
シェルスクリプトはコマンドを自動実行するためのプログラムである。変数、引数、終了ステータスが基本要素となる。
スクリプトの構造
#!/bin/bash
# スクリプトの説明コメント
# 変数定義
NAME="World"
# コマンド実行
echo "Hello, $NAME!"
# 終了ステータス
exit 0
| 要素 | 説明 |
|---|---|
| #!/bin/bash | シバン(実行インタプリタ指定) |
| # | コメント |
| exit N | 終了ステータス(0=成功) |
# 実行方法
chmod +x script.sh
./script.sh
# または
bash script.sh
変数
# 変数代入(=の前後にスペース不可)
NAME="value"
COUNT=10
# 変数参照
echo $NAME
echo ${NAME}
echo "${NAME}_suffix"
# コマンド結果を代入
DATE=$(date +%Y-%m-%d)
FILES=`ls -1 | wc -l`
# 読み取り専用
readonly PI=3.14159
# 変数削除
unset NAME
| 特殊変数 | 説明 |
|---|---|
| $0 | スクリプト名 |
| $1, $2... | 引数(1番目、2番目...) |
| $# | 引数の数 |
| $@ | すべての引数(個別) |
| $* | すべての引数(1つの文字列) |
| $? | 直前のコマンドの終了ステータス |
| $$ | 現在のプロセスID |
クォーティング
| 種類 | 変数展開 | 例 |
|---|---|---|
| ダブルクォート | される | "Hello $NAME" |
| シングルクォート | されない | 'Hello $NAME' |
| バッククォート | コマンド実行 | `date` |
NAME="World"
echo "Hello $NAME" # Hello World
echo 'Hello $NAME' # Hello $NAME
echo "Today: $(date)" # Today: Thu Jan 1 ...
終了ステータス
# 直前コマンドの終了ステータス
ls /exists
echo $? # 0 (成功)
ls /notexists
echo $? # 2 (エラー)
# 条件に使用
if [ $? -eq 0 ]; then
echo "Success"
fi
# && と ||
command1 && command2 # command1成功時のみcommand2実行
command1 || command2 # command1失敗時のみcommand2実行
# 例
mkdir dir && cd dir
grep pattern file || echo "Not found"
出典
[1] Bash Reference Manual - Shell Parameters.
[2] man bash - GNU Bourne-Again Shell.
[2] man bash - GNU Bourne-Again Shell.