変数,配列(shスクリプト)

変数

 変数の設定

f:id:mkyosuke:20200309175208p:plain

  1. = を使う
  2. 変数の値の設定は変数名の先頭に $ を付けない 
  3. = の前後にスペースを入れない (前後にスペースがあるとエラーになるため)
  4. 型はない
  5. 変数名の大文字・小文字は区別される

 

コマンドの実行結果を変数に設定

変数名=`コマンド名`

f:id:mkyosuke:20200309180158p:plain

コマンドの出力を変数に設定したい場合は、「``」(バッククォート) を使用する

 

標準エラー出力のみを変数に設定する

変数名=`コマンド名 2>&1 >/dev/null`

 

標準出力・標準エラー出力の両方を変数に設定する

変数名=`コマンド名 2>&1`

 

変数 sample の値を表示する

echo $sample

 

変数 sample の値と「123」を表示

echo ${sample}123

 

変数 sample の値と変数 sample2 の値を表示

echo ${sample}${sample2}

 

変数の値を他の変数へ設定する

sample2="$sample"

 

変数の値を変数名として値を参照する

eval echo '$'$sample

f:id:mkyosuke:20200309183319p:plain

 

変数の削除

unset 変数名

 

変数を読み取り専用に設定する

readonly 変数名="aaaa"

 

直前に実行されたコマンドの終了ステータスが設定される変数

$?

コマンド正常終了の場合は「0」、異常終了の場合は「0 以外」がセットされる。

 

実行時に指定された引数の数が設定される変数

$#

たとえば $ ./a.sh AAA BBB CCC のように実行された場合、シェルスクリプト a.sh 内で変数 $# を参照するとその値は「3」

a.sh

f:id:mkyosuke:20200309184804p:plain

a.sh実行、引数なしと引数あり

f:id:mkyosuke:20200309185027p:plain

 

 

配列

配列の設定

 配列名=(値1 値2 値3)

 

全ての値を出力する場合は、インデックスに「@」を指定

echo ${array[@]}

 

配列の各要素に値を設定する

配列名[インデックス]=値

例:array[0]="sample"

 

配列に要素を追加する(一つの値の場合)

 配列名+=(値)

例:array+=("sample")

 

配列に要素を追加する(複数の値の場合)

配列名+=(値1 値2 値3)

例:array+=(sample sample2 sample3)

 

変数の値を要素として追加する

配列名+=($変数名)

例:array+=("$sample")

 

配列の要素を参照する

${配列名[インデックス]}

例:echo ${array[0]}

 

配列の全要素を参照する

${配列名[@]}

例:echo ${array[@]}

 

配列の要素数を参照する

${#配列名[@]}

例:echo "${#array[@]}"