はじめに
この実験では、Linux におけるシェル変数の扱い方を学びます。シェル変数は、シェルスクリプト内でデータを保存したり操作したりするために不可欠な要素です。変数には、数値、文字、文字列など、さまざまな種類の値を保持できます。この実験では、シェル変数の作成、参照、使用方法を順を追って説明し、シェルスクリプトの強固な基礎を築きます。
この実験では、Linux におけるシェル変数の扱い方を学びます。シェル変数は、シェルスクリプト内でデータを保存したり操作したりするために不可欠な要素です。変数には、数値、文字、文字列など、さまざまな種類の値を保持できます。この実験では、シェル変数の作成、参照、使用方法を順を追って説明し、シェルスクリプトの強固な基礎を築きます。
シェル変数は、= 記号を使用して値を代入することで作成されます。まずは、いくつかの変数を定義するシンプルなシェルスクリプトを作成してみましょう。
WebIDE (VS Code) でターミナルを開きます。
/home/labex/project ディレクトリに variables.sh という名前の新しいファイルを作成します。
touch /home/labex/project/variables.sh
WebIDE で variables.sh ファイルを開き、以下の内容を追加します。
#!/bin/bash
PRICE_PER_APPLE=5
MyFirstLetters=ABC
greeting='Hello world!'
echo "Price per apple: $PRICE_PER_APPLE"
echo "My first letters: $MyFirstLetters"
echo "Greeting: $greeting"
このスクリプトでは、3 つの変数を作成しました。
PRICE_PER_APPLE: 整数型の変数MyFirstLetters: 文字列型の変数greeting: 複数のスペースを含む文字列型の変数ファイルを保存します。
スクリプトに実行権限を付与します。
chmod +x /home/labex/project/variables.sh
スクリプトを実行します。
./variables.sh
以下のような出力が表示されるはずです。
Price per apple: 5
My first letters: ABC
Greeting: Hello world!
変数を定義する際にシングルクォートを使用し、echo 文でクォートを使用しない場合、greeting 変数内の余分なスペースが出力でも保持されていることに注目してください。
シェル変数を参照する際、特殊な構文を使用する必要があるケースがいくつかあります。それらのケースを確認してみましょう。
WebIDE で variables.sh ファイルを開きます。
ファイルの内容を以下のように書き換えます。
#!/bin/bash
PRICE_PER_APPLE=5
MyFirstLetters=ABC
greeting='Hello world!'
## 特殊文字のエスケープ
echo "The price of an Apple today is: \$HK $PRICE_PER_APPLE"
## 曖昧さの回避
echo "The first 10 letters in the alphabet are: ${MyFirstLetters}DEFGHIJ"
## 空白の保持
echo $greeting
echo "$greeting"
ファイルを保存します。
スクリプトを実行します。
./variables.sh
以下のような出力が表示されるはずです。
The price of an Apple today is: $HK 5
The first 10 letters in the alphabet are: ABCDEFGHIJ
Hello world!
Hello world!
以下の違いに注意してください。
$ 記号をそのまま文字として印刷するためにエスケープ(\ を付加)しています。{} を使用しています。コマンド置換(Command Substitution)を使用すると、コマンドの実行結果を変数の値として利用できます。これは、コマンドを $() またはバッククォート(`)で囲むことで行います。
WebIDE で variables.sh ファイルを開きます。
ファイルの末尾に以下の内容を追加します。
## Command substitution
CURRENT_DATE=$(date +"%Y-%m-%d")
echo "Today's date is: $CURRENT_DATE"
FILES_IN_DIR=$(ls)
echo "Files in the current directory:"
echo "$FILES_IN_DIR"
UPTIME=$(uptime -p)
echo "System uptime: $UPTIME"
ファイルを保存します。
スクリプトを実行します。
./variables.sh
以下のような出力が表示されるはずです(実際の値はシステムの状態によって異なります)。
Today's date is: 2023-08-16
Files in the current directory:
variables.sh
System uptime: up 2 hours, 15 minutes
この例では以下の処理が行われています。
$(date +"%Y-%m-%d") は date コマンドを実行し、その出力を取得します。$(ls) は ls コマンドを実行し、その出力を取得します。$(uptime -p) は -p オプション付きで uptime コマンドを実行し、その出力を取得します。シェル変数は算術演算(計算)にも使用できます。Bash では、算術演算を行うために $((式)) という構文が用意されています。
/home/labex/project ディレクトリに arithmetic.sh という名前の新しいファイルを作成します。
touch /home/labex/project/arithmetic.sh
WebIDE で arithmetic.sh ファイルを開き、以下の内容を追加します。
#!/bin/bash
X=10
Y=5
## Addition
SUM=$((X + Y))
echo "Sum of $X and $Y is: $SUM"
## Subtraction
DIFF=$((X - Y))
echo "Difference between $X and $Y is: $DIFF"
## Multiplication
PRODUCT=$((X * Y))
echo "Product of $X and $Y is: $PRODUCT"
## Division
QUOTIENT=$((X / Y))
echo "Quotient of $X divided by $Y is: $QUOTIENT"
## Modulus (remainder)
REMAINDER=$((X % Y))
echo "Remainder of $X divided by $Y is: $REMAINDER"
## Increment
X=$((X + 1))
echo "After incrementing, X is now: $X"
## Decrement
Y=$((Y - 1))
echo "After decrementing, Y is now: $Y"
ファイルを保存します。
スクリプトに実行権限を付与します。
chmod +x /home/labex/project/arithmetic.sh
スクリプトを実行します。
./arithmetic.sh
以下のような出力が表示されるはずです。
Sum of 10 and 5 is: 15
Difference between 10 and 5 is: 5
Product of 10 and 5 is: 50
Quotient of 10 divided by 5 is: 2
Remainder of 10 divided by 5 is: 0
After incrementing, X is now: 11
After decrementing, Y is now: 4
このスクリプトは、シェル変数を使用したさまざまな算術演算の方法を示しています。
環境変数(Environment Variables)は、現在のシェルセッションで実行されているすべてのプロセスから利用できる特殊な変数です。一般的な環境変数を確認し、独自の環境変数を作成する方法を学びましょう。
/home/labex/project ディレクトリに environment.sh という名前の新しいファイルを作成します。
touch /home/labex/project/environment.sh
WebIDE で environment.sh ファイルを開き、以下の内容を追加します。
#!/bin/bash
## Displaying some common environment variables
echo "Home directory: $HOME"
echo "Current user: $LOGNAME"
echo "Shell being used: $SHELL"
echo "Current PATH: $PATH"
## Creating a new environment variable
export MY_VARIABLE="Hello from my variable"
## Displaying the new variable
echo "My new variable: $MY_VARIABLE"
## Creating a child process to demonstrate variable scope
bash -c 'echo "MY_VARIABLE in child process: $MY_VARIABLE"'
## Removing the environment variable
unset MY_VARIABLE
## Verifying the variable is unset
echo "MY_VARIABLE after unsetting: $MY_VARIABLE"
ファイルを保存します。
スクリプトに実行権限を付与します。
chmod +x /home/labex/project/environment.sh
スクリプトを実行します。
./environment.sh
以下のような出力が表示されるはずです(実際の値はシステム環境によって異なります)。
Home directory: /home/labex
Current user: labex
Shell being used: /bin/zsh
Current PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
My new variable: Hello from my variable
MY_VARIABLE in child process: Hello from my variable
MY_VARIABLE after unsetting:
このスクリプトは、既存の環境変数へのアクセス、新しい環境変数の作成(export)、および削除(unset)の方法を示しています。
この実験では、Linux におけるシェル変数の操作方法を学びました。変数の作成と参照、コマンドの出力を変数に代入するコマンド置換、変数を用いた算術演算、そして環境変数の扱い方について学習しました。これらのスキルはシェルスクリプトの重要な基礎となり、今後 Linux システムを扱う上で非常に価値のあるものになります。
この実験の主なポイントは以下の通りです。
Linux やシェルスクリプトの学習を続ける中で、変数はデータを保存し操作するための強力なツールであることを忘れないでください。スクリプト内で変数を活用する練習を重ね、より柔軟で再利用可能なコードを作成できるようにしましょう。