シェルスクリプトの書き方備忘録

1.書き方

 

先頭に以下の記述をする。

 

・通常

 #! /bin/bash

 

・デバック

 #! /bin/bash -x

 ※実行時に下記指定でも同じ結果になる。

  sh -x スクリプト名

 

 # を付けると、その行がコメントになる。

 

 ; を付けると、1行に複数文を記述できる。

 

2.変数

・変数は、大文字、小文字が区別される。

 

・代入

 val=1

 ※=の前後でスペースを入れない。

 

・参照

 $val

 ${val}

 

・文字列連携

 $val1$val

 

・変数を展開しない

 '$val'

 

・変数を使った演算

 echo `expr $x + 1`

 ※要素間にスペースが必要。()*/を使う場合は\を入れる。

 

・readonlyを付けると読み取り専用変数になる。

 readonly val

 

3.配列

・宣言の仕方

 array=(1 2 3 aaa)

 

・要素を取り出す方法

 $array 先頭の要素が出力される。

 

 ${array[0]} インデックスで指定した要素を取得する。

 

 ${array[@]} 全ての要素を取得する。

 

 ${#array[@]} 要素数を取得する。

 

・要素を変更する方法

 array[1]=10

 

・要素を追加する方法

 array+=(10, 20)

 

4.条件式を評価

・テストコマンド

 条件式を評価する。true:0, false:1 を返す。

 

・条件の書き方

 ・文字

  等しい $str1 = $str2

  異なる $str1 != $str2

 

 ・数値

  等しい -eq

  異なる -ne

  数値1 < 数値2 $num1 -lt $num2

  数値1 > 数値2 $num1 -gt $num2

  数値1 <= 数値2 $num1 -le $num2

  数値1 >= 数値2 $num1 -ge $num2

 

 ・ファイル・ディレクトリ

  file1が新しい file1 -nt file2

  file1が古い file1 -ot file2

  fileが存在 -e file

  ディレクトリが存在 -d dir

 

 ・論理演算し

  and -a

  or -o

  not !

 

5.if文の書き方

if [ 条件式 ]; then

  処理1

elif [ 条件式 ]; then

  処理2

else

  処理3

fi

 

6.case文の書き方

case 変数 in

 値1)

   処理1

   ;;

 値2)

   処理2

   ;;

 *)

   前述の条件に該当しない場合に実行される処理

   ;;

esac

 

7.ループ文

7.1.for文

for i in ${a[@]}

do

  処理

done

 

・continue 次の繰り返し処理に移る。

・break 繰り返し処理から抜ける。

・seq 1 10 1から10までインクリメントする。

 

7.2.while文

while [ 繰り返し条件 ]

do

  処理

done

 

無限ループ

while :

do

  処理

done

 

8.コマンド引数

$0 実行しているスクリプト名

$1 第1引数

$@ 全ての引数

$# 引数の個数

 

9.ユーザからの入力

read $val

 

select $val in 値1 値1

do

  処理

  break;

done

 

10.ファイルからの入力

while read line

do

  処理

done < $1

※第一引数で与えたファイルを読み込む場合

 

11.関数

・宣言

function func() {

  処理

}

※functionは省略可

 

・呼び出し

func

 

・関数の引数

func 変数1 変数2

 

・変数のスコープ

 何もしないとグローバルになる。

 変数宣言時にlocalを付けると、ローカル変数になる。

 

写真素材のピクスタ