シェル変数の操作

ShellBeginner
オンラインで実践に進む

はじめに

この実験では、Linux におけるシェル変数の扱い方を学びます。シェル変数は、シェルスクリプト内でデータを保存したり操作したりするために不可欠な要素です。変数には、数値、文字、文字列など、さまざまな種類の値を保持できます。この実験では、シェル変数の作成、参照、使用方法を順を追って説明し、シェルスクリプトの強固な基礎を築きます。

これはガイド付きの実験(Guided Lab)であり、学習と実践を支援するためのステップバイステップの指示が提供されます。各ステップを慎重に進め、実地経験を積んでください。これまでのデータによると、これは初級レベルの実験で、完了率は 81% です。また、学習者から 99% の高い評価を得ています。

シェル変数の作成

シェル変数は、= 記号を使用して値を代入することで作成されます。まずは、いくつかの変数を定義するシンプルなシェルスクリプトを作成してみましょう。

  1. WebIDE (VS Code) でターミナルを開きます。

  2. /home/labex/project ディレクトリに variables.sh という名前の新しいファイルを作成します。

    touch /home/labex/project/variables.sh
  3. 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: 複数のスペースを含む文字列型の変数
  4. ファイルを保存します。

  5. スクリプトに実行権限を付与します。

    chmod +x /home/labex/project/variables.sh
  6. スクリプトを実行します。

    ./variables.sh

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

    Price per apple: 5
    My first letters: ABC
    Greeting: Hello        world!

    変数を定義する際にシングルクォートを使用し、echo 文でクォートを使用しない場合、greeting 変数内の余分なスペースが出力でも保持されていることに注目してください。

シェル変数の参照

シェル変数を参照する際、特殊な構文を使用する必要があるケースがいくつかあります。それらのケースを確認してみましょう。

  1. WebIDE で variables.sh ファイルを開きます。

  2. ファイルの内容を以下のように書き換えます。

    #!/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"
  3. ファイルを保存します。

  4. スクリプトを実行します。

    ./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)を使用すると、コマンドの実行結果を変数の値として利用できます。これは、コマンドを $() またはバッククォート(`)で囲むことで行います。

  1. WebIDE で variables.sh ファイルを開きます。

  2. ファイルの末尾に以下の内容を追加します。

    ## 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"
  3. ファイルを保存します。

  4. スクリプトを実行します。

    ./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 では、算術演算を行うために $((式)) という構文が用意されています。

  1. /home/labex/project ディレクトリに arithmetic.sh という名前の新しいファイルを作成します。

    touch /home/labex/project/arithmetic.sh
  2. 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"
  3. ファイルを保存します。

  4. スクリプトに実行権限を付与します。

    chmod +x /home/labex/project/arithmetic.sh
  5. スクリプトを実行します。

    ./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)は、現在のシェルセッションで実行されているすべてのプロセスから利用できる特殊な変数です。一般的な環境変数を確認し、独自の環境変数を作成する方法を学びましょう。

  1. /home/labex/project ディレクトリに environment.sh という名前の新しいファイルを作成します。

    touch /home/labex/project/environment.sh
  2. 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"
  3. ファイルを保存します。

  4. スクリプトに実行権限を付与します。

    chmod +x /home/labex/project/environment.sh
  5. スクリプトを実行します。

    ./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 やシェルスクリプトの学習を続ける中で、変数はデータを保存し操作するための強力なツールであることを忘れないでください。スクリプト内で変数を活用する練習を重ね、より柔軟で再利用可能なコードを作成できるようにしましょう。