Linux 変数の宣言

LinuxBeginner

はじめに

この実験では、Linux シェルスクリプトにおける変数について学びます。変数は、スクリプト内でデータを保存し操作するために不可欠です。変数を使用すると、スクリプトの実行中に情報を一時的に保存し、コード全体でその情報を再利用することができます。

変数の宣言と使用方法を理解することは、Linux シェルスクリプトを書くための基本的なスキルです。この知識は、タスクの自動化、設定の管理、および様々なアプリケーション向けのより動的なスクリプトの作成に役立ちます。

この実験の終了時には、bash スクリプトで単純な変数、整数変数、および配列を作成する方法を理解するようになります。これらは、より高度なシェルスクリプト技術の基礎となります。

基本的な変数宣言

このステップでは、bash スクリプトで基本的な変数を宣言し使用する方法を学びます。Linux シェルスクリプトの変数を使うと、データを一時的に保存し、後でスクリプト内で参照することができます。

まず、プロジェクト用のディレクトリを作成し、そこに移動しましょう。

mkdir -p ~/project
cd ~/project

次に、nano テキストエディタを使って variables.sh という名前のスクリプトを作成します。

nano ~/project/variables.sh

エディタ内に以下の内容を入力します。

#!/bin/bash

## 基本的な変数の宣言
BALLOON_COLOR="red"

## 変数の値を表示する
echo "The balloon color is: $BALLOON_COLOR"

このスクリプトでは、BALLOON_COLOR という名前の変数を宣言し、それに "red" という値を割り当てています。そして、echo コマンドでこの変数の値を表示しています。

nano でファイルを保存するには、Ctrl+O を押し、次に Enter を押して確定します。nano を終了するには、Ctrl+X を押します。

次に、スクリプトを実行可能にします。

chmod +x ~/project/variables.sh

このコマンドは、ファイルに実行権限を付与し、プログラムとして実行できるようにします。

最後に、スクリプトを実行します。

./variables.sh

以下の出力が表示されるはずです。

The balloon color is: red

これは、変数が正常に宣言され、変数名の前に $ 記号を付けることでその値にアクセスできることを示しています。

整数変数の宣言

このステップでは、bash スクリプトで整数変数を宣言し使用する方法を学びます。-i フラグは、bash に対して変数を整数として扱うよう指示します。これは数値演算に役立ちます。

再度 variables.sh スクリプトを開いて編集しましょう。

nano ~/project/variables.sh

スクリプトを変更して整数変数を追加します。

#!/bin/bash

## 基本的な文字列変数の宣言
BALLOON_COLOR="red"

## 整数変数の宣言
declare -i BALLOON_SIZE=10

## 両方の変数を表示する
echo "The balloon color is: $BALLOON_COLOR"
echo "The balloon size is: $BALLOON_SIZE inches"

## 整数変数を使った算術演算
declare -i DOUBLE_SIZE=BALLOON_SIZE*2
echo "Double the size would be: $DOUBLE_SIZE inches"

この更新されたスクリプトでは、以下のことを行っています。

  1. 元の文字列変数 BALLOON_COLOR を保持しています。
  2. declare -i 構文を使って新しい整数変数 BALLOON_SIZE を追加しています。
  3. 整数変数を使った算術演算の方法を示しています。

Ctrl+OEnter でファイルを保存し、Ctrl+X で nano を終了します。

次に、スクリプトを再度実行します。

./variables.sh

以下の出力が表示されるはずです。

The balloon color is: red
The balloon size is: 10 inches
Double the size would be: 20 inches

-i 宣言により、bash は変数を整数として認識し、算術演算が可能になります。これは、スクリプト内のカウンター、計算、および数値処理に特に役立ちます。

配列変数の操作

このステップでは、配列変数を宣言し使用する方法を学びます。配列を使うと、単一の変数名で複数の値を格納できます。これは関連するデータの集合を扱う際に便利です。

再度スクリプトを編集しましょう。

nano ~/project/variables.sh

スクリプトを更新して配列変数を追加します。

#!/bin/bash

## 基本的な文字列変数の宣言
BALLOON_COLOR="red"

## 整数変数の宣言
declare -i BALLOON_SIZE=10

## 配列変数の宣言
declare -a BALLOON_COLORS=("red" "green" "blue" "purple" "yellow")

## 個々の変数を表示する
echo "The balloon color is: $BALLOON_COLOR"
echo "The balloon size is: $BALLOON_SIZE inches"

## 配列のすべての要素を表示する
echo "Available balloon colors are: ${BALLOON_COLORS[*]}"

## 特定の配列要素を表示する
echo "The first color is: ${BALLOON_COLORS[0]}"
echo "The third color is: ${BALLOON_COLORS[2]}"

## 配列要素の数を表示する
echo "Number of available colors: ${#BALLOON_COLORS[@]}"

この更新されたスクリプトでは、以下のことを行っています。

  1. 既存の変数を保持しています。
  2. declare -a 構文を使って配列変数 BALLOON_COLORS を追加しています。
  3. 配列要素にアクセスするさまざまな方法を示しています。
    • ${BALLOON_COLORS[*]} はすべての要素を表示します。
    • ${BALLOON_COLORS[0]} は最初の要素にアクセスします(bash の配列は 0 からインデックスが始まります)。
    • ${#BALLOON_COLORS[@]} は配列内の要素の数を返します。

Ctrl+OEnter でファイルを保存し、Ctrl+X で nano を終了します。

次に、スクリプトを再度実行します。

./variables.sh

以下の出力が表示されるはずです。

The balloon color is: red
The balloon size is: 10 inches
Available balloon colors are: red green blue purple yellow
The first color is: red
The third color is: blue
Number of available colors: 5

配列は、関連するデータの集合を管理する必要がある場合に強力です。複数の値を整理し、個別にまたはグループとしてアクセスできます。これは、ファイル名、ユーザー情報、または設定オプションなどのアイテムのリストを管理するのに特に便利です。

変数の操作と展開

このステップでは、様々な方法で変数を操作し展開する方法を学びます。これらのテクニックを使うと、新しい変数を作成することなく変数の値を変更できます。これはテキスト処理やデータ変換に役立ちます。

再度スクリプトを編集しましょう。

nano ~/project/variables.sh

スクリプトを更新して変数操作を実演します。

#!/bin/bash

## 基本的な変数の宣言
NAME="linux"
MESSAGE="Hello, world!"
FILE_PATH="/home/user/documents/report.txt"

echo "Original values:"
echo "NAME = $NAME"
echo "MESSAGE = $MESSAGE"
echo "FILE_PATH = $FILE_PATH"

echo -e "\nVariable manipulation examples:"

## 大文字に変換
echo "NAME in uppercase: ${NAME^^}"

## 小文字に変換
UPPER_NAME="LINUX"
echo "UPPER_NAME in lowercase: ${UPPER_NAME,,}"

## 文字列の長さを取得
echo "Length of MESSAGE: ${#MESSAGE}"

## 部分文字列の抽出 (位置 7 から 5 文字)
echo "Substring of MESSAGE: ${MESSAGE:7:5}"

## 文字列の一部を置換
echo "Replace 'world' with 'Linux': ${MESSAGE/world/Linux}"

## パスからファイル名を抽出
echo "Filename from path: ${FILE_PATH##*/}"

## パスからディレクトリを抽出
echo "Directory from path: ${FILE_PATH%/*}"

## 変数が設定されていない場合のデフォルト値
UNSET_VAR=""
echo "Default value example: ${UNSET_VAR:-default value}"

このスクリプトは、変数を操作するいくつかの方法を実演しています。

  1. ${NAME^^} - 大文字に変換
  2. ${UPPER_NAME,,} - 小文字に変換
  3. ${#MESSAGE} - 文字列の長さを取得
  4. ${MESSAGE:7:5} - 部分文字列の抽出 (位置と長さ)
  5. ${MESSAGE/world/Linux} - 文字列の一部を置換
  6. ${FILE_PATH##*/} - 先頭から最長一致部分を削除 (ファイル名を抽出)
  7. ${FILE_PATH%/*} - 末尾から最短一致部分を削除 (ディレクトリを抽出)
  8. ${UNSET_VAR:-default value} - 変数が設定されていない場合はデフォルト値を使用

Ctrl+OEnter でファイルを保存し、Ctrl+X で nano を終了します。

次に、スクリプトを実行します。

./variables.sh

以下のような出力が表示されるはずです。

Original values:
NAME = linux
MESSAGE = Hello, world!
FILE_PATH = /home/user/documents/report.txt

Variable manipulation examples:
NAME in uppercase: LINUX
UPPER_NAME in lowercase: linux
Length of MESSAGE: 13
Substring of MESSAGE: world
Replace 'world' with 'Linux': Hello, Linux!
Filename from path: report.txt
Directory from path: /home/user/documents
Default value example: default value

これらの変数操作テクニックは、テキストデータの処理、文字列からの情報抽出、およびスクリプト内でのデフォルト値の扱いに非常に役立ちます。

環境変数と変数のスコープ

この最後のステップでは、環境変数、変数のスコープ、および他のプロセスで使用できるように変数をエクスポートする方法について学びます。

environment.sh という名前の新しいスクリプトを作成します。

nano ~/project/environment.sh

以下の内容を追加します。

#!/bin/bash

## いくつかの一般的な環境変数を表示する
echo "USER: $USER"
echo "HOME: $HOME"
echo "PATH: $PATH"
echo "PWD: $PWD"
echo "SHELL: $SHELL"

## ローカル変数を作成する
LOCAL_VAR="This is a local variable"
echo "LOCAL_VAR: $LOCAL_VAR"

## 変数をエクスポートして子プロセスで使用できるようにする
export EXPORTED_VAR="This variable is exported"
echo "EXPORTED_VAR: $EXPORTED_VAR"

## サブシェルでの変数の動作を実演する
echo -e "\nVariable behavior in subshell:"
(
  echo "Inside subshell:"
  echo "  LOCAL_VAR: $LOCAL_VAR"
  echo "  EXPORTED_VAR: $EXPORTED_VAR"
  echo "  Creating subshell-only variable"
  SUBSHELL_VAR="This variable only exists in the subshell"
  echo "  SUBSHELL_VAR: $SUBSHELL_VAR"
)

echo -e "\nAfter subshell:"
echo "LOCAL_VAR: $LOCAL_VAR"
echo "EXPORTED_VAR: $EXPORTED_VAR"
echo "SUBSHELL_VAR: $SUBSHELL_VAR" ## This will be empty

## エクスポートの動作をテストするスクリプトを作成する
echo -e "\nCreating child script to test variable export..."
cat > ~/project/child_script.sh << 'EOF'
#!/bin/bash
echo "In child script:"
echo "EXPORTED_VAR: $EXPORTED_VAR"
echo "LOCAL_VAR: $LOCAL_VAR"
EOF

chmod +x ~/project/child_script.sh

## 子スクリプトを実行する
echo -e "\nRunning child script:"
./child_script.sh

このスクリプトは以下を実演しています。

  1. 一般的な環境変数 (USER, HOME, PATH など)
  2. ローカル変数とエクスポートされた変数の違い
  3. サブシェルでの変数の動作 (括弧でサブシェルを作成します)
  4. エクスポートされた変数が子プロセスに継承される仕組み

Ctrl+OEnter でファイルを保存し、Ctrl+X で nano を終了します。

スクリプトを実行可能にします。

chmod +x ~/project/environment.sh

次に、スクリプトを実行します。

./environment.sh

出力結果から、異なるコンテキストでの変数の動作を確認できます。

  • 環境変数はシステムによって事前に設定されています。
  • ローカル変数は現在のスクリプト内でのみ存在します。
  • エクスポートされた変数は子プロセスに渡されます。
  • サブシェルで作成された変数は親シェルでは使用できません。

子プロセスを生成する複雑なスクリプトや他のスクリプトをソースするスクリプトを作成する際に、変数のスコープを理解することは重要です。これにより、システムの異なる部分間でのデータの流れを管理することができます。

まとめ

この実験では、Linux シェルスクリプトにおける変数の宣言と操作の基本を学びました。以下の内容を学んできました。

  • 基本的な変数の宣言と使用方法
  • 整数型変数と算術演算
  • データの集合を格納するための配列変数
  • テキスト処理のための変数操作テクニック
  • 環境変数と変数のスコープ

これらのスキルはシェルスクリプトの基礎を形成し、Linux 環境でのタスク自動化に不可欠です。変数を使用することで、実行中にデータを格納し処理することができ、より動的で柔軟なスクリプトを作成することができます。

これらのテクニックを使って、以下のことができるようになりました。

  • スクリプト内に設定情報を格納する
  • ユーザー入力やファイル内容を処理する
  • テキストデータやファイルパスを操作する
  • 異なるスクリプトやプロセス間でデータを共有する

Linux シェルスクリプトの学習を続ける中で、変数の使い方をマスターすることで、強力で効率的な自動化ツールを作成するための多くの可能性が開けることに気づくでしょう。