はじめに
この実験では、Linux におけるシェル変数の扱い方を学びます。シェル変数は、シェルスクリプト内でデータを保存したり操作したりするために不可欠な要素です。変数には、数値、文字、文字列など、さまざまな種類の値を保持できます。この実験では、シェル変数の作成、参照、使用方法を順を追って説明し、シェルスクリプトの強固な基礎を築きます。
シェル変数の作成
シェル変数は、= 記号を使用して値を代入することで作成されます。まずは、いくつかの変数を定義するシンプルなシェルスクリプトを作成してみましょう。
WebIDE (VS Code) でターミナルを開きます。
/home/labex/projectディレクトリにvariables.shという名前の新しいファイルを作成します。touch /home/labex/project/variables.shWebIDE で
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!以下の違いに注意してください。
- 最初の行では、
$記号をそのまま文字として印刷するためにエスケープ(\を付加)しています。 - 2 行目では、変数名を明確に定義するために中括弧
{}を使用しています。 - 最後の 2 行は、空白を含む変数を参照する際に、クォートを使用する場合と使用しない場合の違いを示しています。
- 最初の行では、
コマンド置換
コマンド置換(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.shWebIDE で
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.shWebIDE で
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 やシェルスクリプトの学習を続ける中で、変数はデータを保存し操作するための強力なツールであることを忘れないでください。スクリプト内で変数を活用する練習を重ね、より柔軟で再利用可能なコードを作成できるようにしましょう。



