はじめに
演算子の種類や基本構文等、シェルスクリプトの基本的な書き方についてまとめます。
シバンの定義
シェルスクリプトの1行目にはシェルスクリプトを実行するシェル(インタプリタ)を定義します。
#!/bin/sh
その他の主なシバン
| シバン| インタプリタ |
|:--|:--|:--|
| #!/bin/bash/ | bash |
| #!/usr/bin/python | python |
シェルスクリプトの実行方法
シェルスクリプトは実行方法により必要になるパーミッションが異なります。
シバンで指定したシェルを起動してスクリプトを実行する場合は、そのスクリプトファイルに実行権が必要です。(下記の表を参照)
例 | 備考 |
---|---|
./script.sh | ・シバンで定義されたシェル(子プロセス)を起動する ・ファイルに実行権が必要 |
bash script.sh | ・別途bash(子プロセス)を起動する(シバンを読み込まない) ・ファイルに実行権不要 |
. script.sh | ・"source script.sh" と同様の処理 ・現在のシェル(プロセス)がスクリプトを実行(シバンを読み込まない) ファイルに実行権不要 |
パーミッションの追加(実行権の付与)
パーミッションの確認方法
$ ls -l script.sh
-rw-rw-r--. 1 user user 20 7月 10 15:27 script.sh
全てのユーザに実行権を付与する場合
$ chmod a+x script.sh
$ ls -l script.sh
-rwxrwxr-x. 1 user user 20 7月 10 15:27 script.sh
特殊引数
| 特殊引数 | 説明 |
|:--|:--|:--|
| $0 | スクリプト自身のファイル名が格納される |
| $1-9 | 実行時に指定した引数が順番に格納される
10以上の引数を指定する場合は数字を{}で括る
例:${10} |
| $# | 引数の数が格納される |
| $* | $0以外の引数が1つの文字列として格納される |
| $$ | スクリプト実行時のプロセスIDが格納される |
| $? | スクリプトの終了ステータスが格納される(正常終了:0 異常終了:1) |
#!/bin/bash
echo $#
echo $0
echo $1
echo $2
echo $10 #$1までが解釈される
echo ${10}
echo $$
echo $?
echo $#
echo $*
# 実行結果
. script.sh a b c d e f g h i j k l m
13
-bash #スクリプトをパスで指定すればファイル名になる
a
b
a0
j
5601
0
13
a b c d e f g h i j k l m
配列
複数のデータを扱う
#!/bin/bash
list=("string" 10) #配列の定義
#配列の要素の取得
echo ${list[0]} #1番目の要素の表示
echo ${list[1]} #2番目の要素の表示
echo ${list[0]:1} #1番目の要素を2文字目から表示
echo ${#list[0]} #1番目の要素の文字数を表示
echo ${#list[@]} #要素数
echo ${#list[*]} #要素数
# 実行結果
$ ./script.sh
string
10
tring
6
2
2