「シェルスクリプトの基礎 - 変数」の版間の差分

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動
148行目: 148行目:


== コマンドの実行結果を変数に代入する ==
== コマンドの実行結果を変数に代入する ==
lsやgrepやfind等のコマンドの実行結果を変数に代入するには、以下のように記述する。<br>
<code>ls</code>、<code>grep</code>、<code>find</code>等のコマンドの実行結果を変数に代入するには、以下のように記述する。<br>
  変数=$(コマンド)
  変数=$(コマンド)
    または
変数=`コマンド`
<br>
<br>
以下の例では、lsコマンドの実行結果を変数filesに代入して、echoで出力している。<br>
以下の例では、lsコマンドの実行結果を変数FILESに代入して、echoで出力している。<br>
  #!/bin/bash
<source lang="sh">
  #!/bin/sh
   
   
  files=$(ls)
  FILES=$(ls)
  echo "$files"
  echo "$FILES"
</source>
または<br>
<source lang="sh">
#!/bin/sh
FILES=`ls`
echo "$FILES"
</source>
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:シェルスクリプト]]
[[カテゴリ:シェルスクリプト]]

2020年9月28日 (月) 04:48時点における版

概要



変数の定義と参照

変数へ値を代入する時は$を付けず、変数を参照するときは$を付ける。

 #!/bin/sh
 
 name=Michael        # 変数の定義
 echo Hello $name    # 変数の参照
 echo "Hello $name"  # ダブルクォーテーションは変数を展開する
 echo 'Hello $name'  # シングルクォーテーションは変数を展開しない


# 出力
Hello Michael
Hello Michael
Hello $name


未定義の変数を参照すると、空文字列と同様に扱われる。(エラーにはならない)

 #!/bin/sh
 
 echo "Hello $name !"


# 出力
Hello  !



定数

以下のように実行すると、指定した変数や関数に対する代入、unsetができなくなる。

 readonly var      # 変数varをreadonlyにする
 readonly -a arr   # 配列arrをreadonlyにする
 readonly -f func  # 関数funcをreadonlyにする


以下のように、変数の定義と同時にreadonlyを指定することも可能である。

 readonly USERNAME="Mike"


以下の例では、変数MAX_SIZEを100で初期化した後、200という値を代入しようとしている。
変数MAX_SIZEは定数化されているので、代入しようとした場合はエラーになる。

 #!/bin/bash
 
 readonly MAX_SIZE=100
 MAX_SIZE=200


# 出力
./sample.sh: 行 4: MAX_SIZE: 読み取り専用の変数です



変数の値の確認

test[ ... ]で使用できる演算子には、以下のようなものがある。

  • -z 文字列
    文字列の長さが0の場合に真
  • -n 文字列
    文字列の長さが0でない場合に真


変数名にダブルクォーテーションを付けて値を展開して、上記の演算子でその文字列の長さをチェックすることにより、
変数に値が代入されている(または、代入されていない)ことを確認することができる。

変数に値が代入されていることを確認する

以下の例では、変数NAMEの値がセットされているか調べている。

 #!/bin/bash
 
 if [ -n "$NAME" ]; then
    echo $NAME
 fi


変数に値が代入されていないことを確認する

以下の例では、変数NAMEの値がセットされていないか調べている。

 #!/bin/bash
 
 if [ -z "$NAME" ]; then
    echo 'NAME is not set'
 fi


# 出力
NAME is not set



数値の演算

加算 / 減算

変数の値に対して、加算および減算を行うには以下のように記述する。

 #!/bin/bash
 
 val=100
 let val=$val+200
 echo $val

または

 #!/bin/bash
 
 val=100
 val=$(($val+200))
 echo $val


# 出力
300


ランダムな数値の取得

Bashのシェル変数$RANDOMを参照すると、0~32767の範囲のランダムな整数を取得することができる。

 #!/bin/bash
 
 echo $RANDOM


# 出力
27591


文字列の連結

複数の変数を連結するには、以下のように続けて記述する。

 #!/bin/sh
 
 STR1="Shell script"
 STR2="is intersting!"
 
 STR=$STR1$STR2
 
 echo $STR


また、以下のように変数を{}で括る。

 #!/bin/sh
 
 STR1="Shell script"
 STR="${STR1} is intersting!!"
 
 echo $STR



コマンドの実行結果を変数に代入する

lsgrepfind等のコマンドの実行結果を変数に代入するには、以下のように記述する。

変数=$(コマンド)
   または
変数=`コマンド`


以下の例では、lsコマンドの実行結果を変数FILESに代入して、echoで出力している。

 #!/bin/sh
 
 FILES=$(ls)
 echo "$FILES"

または

 #!/bin/sh
 
 FILES=`ls`
 echo "$FILES"