Bashで変数を効果的に使用する方法
変数はプログラミング言語の主要な部分です。プログラミングの目的で、いつでもアクセス、変更、または削除できる任意のタイプのデータが変数に格納されます。Bashでは、環境変数とシェル変数の2種類の変数が使用されます。このチュートリアルでは、Bashにおける異なるタイプの変数の使用方法が示されています。
目次:
- 紹介
- 変数を宣言する
- 「エコー」コマンドを使って変数を印刷する
- 「printf」コマンドを使用して変数を出力する
- ローカル変数とグローバル変数
- Bash関数の引数変数
- 変数をエクスポートする
- コマンドライン変数
- PATH変数の使用
- $RANDOM変数の使用
紹介
Bashでは変数を宣言する際にデータ型の宣言は必須ではありません。Bashは弱い型のスクリプト言語であるためです。しかし、"declare"コマンドを使用することで、変数のデータ型を指定して変数を宣言することができます。Bashの変数は、他のスクリプト言語のように"$"記号なしで宣言されますが、変数の値を印刷する際には変数名の前に"$"記号を使用します。Bashでは、変数に値を割り当てる際に割り当て演算子(=)の前後にスペースを置くことはサポートされていません。
1. 特殊変数
Bash には特別な目的に使用されるいくつかの特別な変数があります。Bash スクリプトで主に使用される特別な変数のいくつかは、以下に説明されています:
| 変数 | 目的 |
| 現在のプロセスIDを印刷するために使用されます。 |
| 実行中のスクリプト名を印刷するために使用されます。 |
| 最初の5つの引数の値を印刷するために使用されます。 |
| スクリプトの実行時に渡されるすべての引数を読み取るために使用されます。 |
| 全引数の合計数をカウントするために使用されます。 |
| それは現在のプロセスの終了ステータスを含んでいます。 |
2. 環境変数
環境変数はグローバル変数のように機能し、これらの変数は任意のシェルからアクセスできます。「env」コマンドは、Bashのすべての環境変数のリストを表示します。いくつかの便利な環境変数を使用する目的は、以下のように述べられています。
| 変数 | 目的 |
| 現在の文字セット情報が含まれています。 |
| 保存されたパス値が含まれています。 |
| これはスクリプトを実行しているユーザーの名前を含んでいます。 |
| 現在のログインユーザー名が含まれています。 |
| それはホームディレクトリの位置を含んでいます。 |
| ランダムな数を生成するために使用されます。 |
変数を宣言する
次のスクリプトでは、Bashスクリプトで変数を宣言するさまざまな方法が示されています。「declare」コマンドは、整数データ型の変数を宣言するために「-i」オプションと共にスクリプトで使用されます。この変数に文字列値が割り当てられた場合、0がその変数に割り当てられます。最初の変数「$Str」には文字列が含まれています。2番目の変数「$n1」には数値が含まれています。3番目の変数「$n2」も、「declare」コマンドによって宣言された数値が含まれています。「read」コマンドは、ユーザーから取得した入力値を「$val」という4番目の変数に割り当てるためにスクリプトで使用されます。
#Assign a string value
Str="Linux"
#Assign a numeric value without the `declare` command
n1=550
#Assign a numeric value with the `declare` command
declare -i n2=340
#Assign value after calculation
((result=n1+n2))
#Assign the value taken from the user to a variable
read -p "Enter a string: " val
#Assign a variable to another variable
n2=$valスクリプトは数値入力値89で実行されます。そのため、“$n2 ”変数は89の値を含んでいます。
スクリプトは、文字列の入力値「test」で実行されます。したがって、「$n2」変数は整数データ型で宣言されたため、値は0を含みます。
変数を「echo」コマンドを使って出力する
「echo」は、端末に出力を表示するために使用できるコマンドの一つです。以下のスクリプトでは、コースの値がユーザーからの入力として取得され、入力された値が「echo」コマンドを使用して別の文字列と共に表示されます。変数の値を表示するためには、「echo」コマンドの前に二重引用符(“)を使用する必要があります。そうでない場合は、変数の名前が表示されます。
#!/bin/bash
#Assign the value taken from the user
read -p "Enter the course name: " course
#Print the value of the variable by using `echo`
echo "The course name is $course"スクリプトを「CSE-407」値で実行した後、次の出力が表示されます:
変数を「Printf」コマンドを使って出力する
「printf」はターミナルで書式化された出力を印刷するための別のBashコマンドです。次のスクリプトでは、2つの文字列値が変数に割り当てられています。その後、「printf」コマンドが使用されて、変数の値が「%s」指定子で印刷されます。スクリプトでは、2つの変数の値を印刷するために2つの「%s」指定子が使用されています。
#!/bin/bash
#Assign two string values
course_code="CSE406"
course_teacher="Alex"
#Print the variables by using the `printf`
printf "%s course is taken by %s\n" $course_code $course_teacherスクリプトを実行した後、次の出力が表示されます。変数の値は、“%s ” 指定子の位置に基づいて他の文字列値と共に印刷されます:
ローカル変数とグローバル変数
関数の外で宣言された変数は「グローバル」変数と呼ばれ、関数の内で宣言された変数は「ローカル」変数と呼ばれます。「ローカル」キーワードはローカル変数を定義するために使用されます。グローバル変数とローカル変数の使用は以下のスクリプトに示されています。スクリプトでは、87が「$num」グローバル変数に代入され、25が「$num」ローカル変数に代入されています。
#!/bin/bash
#Assign a global variable
num=87
function func {
#Print the global variable
echo "The value of the global variable is $num"
#Define a local variable with the same name
local num=25
#Print the local variable
echo "The value of the local variable is $num"
}
#Call the function
func
#Print the global variable again
echo "The value of the global variable after calling the function is $num"スクリプトを実行した後、以下の出力が表示されます。出力によれば、関数を実行した後もグローバル変数は変更されず、グローバル変数の値は関数を呼び出す前後で87のままです。
バッシュ関数の引数変数
Bash関数への引数の値の渡し方は、他のプログラミング言語とは異なります。関数が呼び出されるとき、関数の引数値は空白で渡されます。関数内では「$1」、「$2」、・・・、「$n」変数が使われて引数値を読み取ります。三つの関数引数を使う方法は、以下のスクリプトに示されています。以下のスクリプトでは、book_names()という関数に三つの文字列値が渡され、これらは「$1」、「$2」、「$3」変数によって読み取られます。これらの引数値は「printf」コマンドによってフォーマットされた状態で出力されます。
#!/bin/bash
book_names()
{
#Read the argument values
book1=$1
book2=$2
book3=$3
echo "Book names are:"
#Print the argument values
printf "1. %s\n2. %s\n3. %s\n" "$book1" "$book2" "$book3"
}
#Call the function with 3 arguments
book_names "Bash Pocket Reference" "Learning the Bash Shell" "Bash CookBook"スクリプトを実行した後、次の出力が表示されます。シリアル番号と改行が出力に追加されます:
変数のエクスポート
時々、変数の値を複数のシェルで共有する必要があります。このタスクを実行するために「export」コマンドが使用されます。「export」コマンドの使用方法は、このチュートリアルのこの部分に示されています。
次のコマンドを実行して、"bash" コマンドを実行した後に変数がどうリセットされるかを確認してください。ここでは、文字列値が "$OS" 変数に設定され、後でターミナルに表示されます。その後、"bash" コマンドを実行した後に "$OS" 変数が再び表示されると、何も表示されません。なぜなら、"bash" コマンドを実行した後、すべてのシェル変数がリセットされるからです。
OS="Ubuntu"
echo $OS
bash
echo $OS以下の出力は、“bash”コマンドを実行した後に“${OS}”変数の値が空であることを示しています。
特定のシェル変数の値を別のシェルで共有したい場合は、“export” コマンドを使用して “bash” コマンドを実行する必要があります。次のコマンドを実行して “$OS” 変数の値をエクスポートし、“bash” コマンドを実行した後にその値を印刷します。ここでは、“$OS” 変数は、変数を印刷し、“bash” コマンドを実行する前にエクスポートされます。その後、“$OS” 変数が再び印刷されます。
OS="CentOS"
export OS
echo $OS
bash
echo $OS以下の出力は、「bash」コマンドを実行した後に「$OS」変数の値が以前の値を含んでいることを示しています。
エクスポートされた変数は、次のスクリプトでその変数に以前の値が含まれているかどうかを確認するために使用されます。
#!/bin/bash
#Print the exported variable
echo "The operating system is $OS"以下の出力は、エクスポートされた「$OS」変数が以前の値であるCentOSを含んでいることを示しています。
コマンドライン変数
コマンドライン引数は、スクリプトを実行する時にスクリプトに値を渡すために使用されます。変数「$#」、「$0」、および「$1」の使用法は、以下のスクリプトに示されています。コマンドライン引数の総数は「$#」変数によってカウントされ、「$total」変数に保存されます。「$total」の値が0より多い場合、実行中のスクリプトのファイル名は「$0」変数を使用して表示され、最初の引数の値は「$1」変数を使用して表示されます。スクリプト実行時に引数が渡されない場合、エラーメッセージが表示されます。
#!/bin/bash
#Count the total number of arguments
total=$#
if [ $total -ne 0 ]
then
#Print the total number of arguments
echo "Total command line arguments are $total"
#Print the script name
echo "The script name is $0"
#Print the first argument
echo "The first argument value is $1"
else
#Print message
echo "No argument value is given."
fiスクリプトを実行する際に引数の値を渡すと、次の出力が表示されます:
引数なしでスクリプトを実行した後、次の出力が表示されます:
PATH変数の使用
「$PATH」はBashの重要な環境変数の一つです。異なる実行可能ファイルやスクリプトファイルの場所がこの変数に保存されています。ユーザーが実行可能ファイルやスクリプトファイルにアクセスしようとすると、シェルはそのファイルの位置を「$PATH」変数で確認します。この変数の値は要件に応じて変更することができます。
次のコマンドを実行して、現在の「` PATH 」変数の出力を確認してください:
echo $PATH「/home/fahmida/tempdir」の場所を「$PATH」変数に追加したいとしましょう。新しい場所を「$PATH」に追加し、「$PATH」変数の現在の値を再度表示するために、以下のコマンドを実行してください:
PATH=${PATH}:/home/fahmida/tempdir
echo $PATHコマンドを実行した後に次の出力が表示されます。新しい場所は「` PATH 」変数の最後に追加されます。
$RANDOM変数の使用
Bashには、他のプログラミング言語のようにランダムな数を生成するためのランダム関数はありません。特別な変数「$RANDOM」を使用することで、Bashで数を生成することができます。以下のスクリプトは、「for」ループを5回繰り返すことで5つのランダムな数を生成します。各ランダムな数の長さは、ループの各イテレーションで異なる場合があります。
#!/bin/bash
echo "Generated 5 random numbers:"
#Iterate the loop for 5 times
for i in {1..5}
do
#Print the random numbers
echo $RANDOM
doneスクリプトを実行した後、以下のような類似の出力が現れます。この出力によれば、5桁の数字が3つと3桁の数字が2つ生成されます。スクリプトを再実行すると出力が変わります:
結論
このチュートリアルでは、異なるタイプのBash変数を効果的に使用する方法について、複数のBashコマンドとスクリプトを使用して説明します。このチュートリアルを読むことで、Bashユーザーは異なるBash変数の使い方について明確な知識を得ることができます。












