GNU/Linux >> Linux の 問題 >  >> Linux

Bash 変数チュートリアル – 6 つの実用的な Bash グローバルおよびローカル変数の例

この記事は、進行中の bash チュートリアル シリーズの一部です。他のプログラミング言語と同様に、Bash にも変数が用意されています。

Bash 変数は、プログラムの存続期間中に必要となる情報を一時的に格納します。

構文:

VARNAME=VALUE

注: 変数の割り当てでは、「=」記号の周りにスペースを入れないでください。 VAR=VALUE を使用すると、シェルは「=」を記号として認識し、コマンドを変数割り当てとして扱います。 VAR =VALUE を使用すると、シェルは VAR がコマンドの名前であると想定し、それを実行しようとします。

シェルは変数の型を気にしません。変数には、文字列、整数、または実数を格納できます。

Example.1 簡単な Bash 変数割り当ての使用法

次のスクリプトは、LIST という変数を作成し、値「/var/opt/bin」を割り当てます。変数にアクセスするには、変数名の前に $ を付けるだけで、その変数に格納されている値が得られます。

$ cat sample.sh
#!/bin/bash
LIST="/var/opt/bin/"
ls -l $LIST

上記のスクリプトを実行すると、以下に示すように /var/opt/bin が長い形式で一覧表示されます。

$ ./sample.sh
total 8
drwxrwsr-x 2 bin  bin 4096 Jan 29 06:43 softwares
drwxr-sr-x 5 root bin 4096 Sep  2  2009 llist

Bash 変数のスコープ – ローカルおよびグローバル

Bash では、変数を宣言する必要はありません。ただし、これまで使用されていない変数にアクセスすると、警告やエラー メッセージは表示されません。代わりに、空白の値が表示されます。

例 2. bash 変数の空白値

$ cat var1.sh
#!/bin/sh
echo "Variable value is: $VAR1"
VAR1="GEEKSTUFF"
echo "Variable value is: $VAR1"

$ ./var1.sh
Variable value is:
Variable value is: GEEKSTUFF

上記のように、最初は変数に空白の値があり、割り当てた後、値を取得できます。 export コマンドは、対話型シェルから変数をエクスポートするために使用されます。 export は、変数のスコープへの影響を示します。

例 3. エクスポートなしの Bash 変数

インタラクティブ シェルで変数に値を割り当て、シェル スクリプトで同じ値にアクセスしてみてください。

$ VAR2=LINUX

$ cat var2.sh
#!/bin/bash
echo "VAR2=$VAR2"
VAR2=UNIX
echo "VAR2=$VAR2"

次に、以下に示すように上記のスクリプトを実行します。

$ ./var2.sh
VAR2=
VAR2=UNIX

それでも、変数 VAR2 の値は空白になります。シェルは変数 VAR2 を現在のシェルでのみ LINUX に格納します。 var2.sh の実行中に、シェルが生成され、スクリプトが実行されます。そのため、変数 VAR2 は生成されたシェルに値を持ちません。以下に示すように、変数をエクスポートして、別のプログラム (シェル スクリプトを含む) に継承させる必要があります。

例 4. Bash 変数のエクスポート

$ export VAR2=LINUX

$ cat var2.sh
#!/bin/bash
echo "VAR2=$VAR2"
VAR2=UNIX
echo "VAR2=$VAR2"

上記のスクリプトを実行してください。

$ ./var2.sh
VAR2=LINUX
VAR2=UNIX
$
$echo $VAR2
LINUX

ここで、シェル スクリプト var2.sh の実行後、VAR2 の値が LINUX になっていることがわかります。現在のシェルでスクリプトを実行しない限り、変数はインタラクティブ シェルに戻されないためです。

Bash 変数の宣言

bash で宣言ステートメントを使用すると、変数に割り当てられる値を制限できます。変数のプロパティを制限します。宣言ステートメントのオプションは、変数の型を決定するために使用されます。

構文:

declare option variablename
  • 宣言はキーワードです
  • オプションは次のようになります:
    • -r 読み取り専用変数
    • -i 整数変数
    • -配列変数
    • 関数の -f
    • -x は、環境を介して後続のコマンドを宣言し、エクスポートします。

例 5.declare を使用した Bash 変数の宣言

$ cat declar.sh
#!/bin/bash
declare -i intvar
intvar=123 # Assigning integer value.
echo $intvar
intvar=12.3 #Trying to store string type value to an integer variable
echo $intvar

declare -r rovar=281
rovar=212 # Trying to change the readonly variable.

以下の実行から、無効なデータを変数に割り当てたときにエラー メッセージが表示されることがわかります。

$ ./declar.sh
123
t.sh: line 6: 12.3: syntax error: invalid arithmetic operator (error token is ".3")
123
t.sh: line 11: rovar: readonly variable

グローバル Bash 変数

グローバル変数は環境変数とも呼ばれ、すべてのシェルで使用できます。すべての環境変数を表示するには、printenv コマンドを使用します。

$ printenv
SHELL=/bin/bash
HISTSIZE=1000
SSH_TTY=/dev/pts/1
HOME=/root
LOGNAME=root
CVS_RSH=ssh

ローカル Bash 変数

ローカル変数は、コード ブロック内でのみ表示されます。 local は、ローカル変数を宣言するために使用されるキーワードです。関数では、ローカル変数はその関数ブロック内でのみ意味を持ちます。

例 6. グローバルおよびローカル Bash 変数

$ cat localvar.sh
#!/bin/bash
pprint()
{
  local lvar="Local content"
  echo -e "Local variable value with in the function"
  echo $lvar
  gvar="Global content changed"
  echo -e "Global variable value with in the function"
  echo $gvar
}

gvar="Global content"
echo -e "Global variable value before calling function"
echo $gvar
echo -e "Local variable value before calling function"
echo $lvar
pprint
echo -e "Global variable value after calling function"
echo $gvar
echo -e "Local variable value after calling function"
echo $lvar

上記のスクリプトを実行し、

$ sh t.sh
Global variable value before calling function
Global content
Local variable value before calling function

Local variable value with in the function
Local content
Global variable value with in the function
Global content changed
Global variable value after calling function
Global content changed
Local variable value after calling function

上記の出力では、ローカル変数は、関数の呼び出しの前後で空の値のみを持ちます。そのスコープは関数内のみです。グローバル変数は関数の実行後も更新された値を持っていますが、関数から消えてしまいました。


Linux
  1. BashForループガイドと例

  2. Linux nice and reniceコマンドチュートリアル(7例)

  3. 15 の例を含む究極の Bash Array チュートリアル

  1. Cプログラミングチュートリアル4-変数とメモリ

  2. Awk チュートリアル:3 つの実践例で Awk 変数を理解する

  3. Perl 配列参照と逆参照のチュートリアルと実践例

  1. Bash の For ループと While ループの例

  2. 実際の例を含む Bash シェルの終了ステータスのチュートリアル

  3. bash から変数をエクスポートして Python で使用する