Bashにおける条件論理をマスターする方法
条件ロジックの使用は、あらゆるプログラミング言語において非常に重要な部分です。条件ロジックは、プログラミングの問題を解決するために、Bashでさまざまな方法で実装できます。このチュートリアルでは、文字列や数値を比較するためのさまざまな種類の「if」文や「case」文、変数の内容をチェックする方法、ファイルやディレクトリの存在を確認する方法など、Bashにおける条件ロジックの使用方法を示します。
- 「もし」文の使用
- 「If-Else」ステートメントの使用
- 「If-Elif-Else」ステートメントの使用
- 空の変数をチェックするための「もし」ステートメントの使用
- 論理演算子を使用した「もし」文の使い方
- ネストされた「If」ステートメントの使用
- ファイルの存在を確認するための「If」文の使用
- ディレクトリの存在を確認するための「If」ステートメントの使用
- 正規表現を使った「If」文の使用
- 「ケース」ステートメントの使用
「もし」という文の使い方
この例は、Bashにおける「if」文の簡単な使い方を示しています。Bashで数値を比較するために使用できる6つのタイプの比較演算子があります。これらは「-eq」(等しい)、「-ne」(等しくない)、「-le」(以下)、 「-ge」(以上)、「-lt」(未満)、および「-gt」(超過)です。「-lt」と「-eq」の使い方は、次のスクリプトで示されており、数が99より小さいか、「-lt」演算子を使用してチェックされていないかどうかを確認します。数は偶数か奇数かであり、「-eq」演算子でチェックされます。
#!/bin/bash
#Assign a numeric value
((number=50))
#Check the numeric value using 'if' statement
if [ $number -lt 99 ]
then
echo "Number is valid."
fi
#Check whether the number is even or not
if [ $(( $number % 2 )) -eq 0 ]
then
echo "Number is even."
fi出力:
前のスクリプトを実行した後に以下の出力が表示されます:
「If-Else」文の使用
「if-else」文の使用は、以下のスクリプトに示されています。ユーザーから文字列の値を取得し、その値が「BLUE」であるかどうかを「if-else」文を使ってチェックします。
#!/bin/bash
#Take a string value from the user
read -p "Enter your favorite color:" color
#Check the string value using 'if-else' statement
if [ ${color^^} == 'BLUE' ]
then
echo "Fine, Blue color is available."
else
echo "$color is not available."
fi出力:
前のスクリプトを実行した後、入力として「赤」を指定すると、次のような出力が表示されます:
前のスクリプトを実行した後、入力として「青」を指定すると、次のような出力が表示されます:
「If-Elif-Else」ステートメントの使用
「if-elif-else」文の使用は、次のスクリプトに示されています。ユーザーから数値を取得し、異なる値と照合して、一致が見つかるまで確認します。一致が見つかった場合、対応するメッセージが表示されます。一致が見つからない場合は、デフォルトのメッセージが表示されます。
#!/bin/bash
#Take the id value from the user
read -p "Enter your serial number:" serial
#Check the input value using the 'if-elif-else' statement
if [ $serial == '4523' ]
then
echo "You are selected in group A."
elif [ $serial == '8723' ]
then
echo "You are selected in group B."
elif [ $serial == '3412' ]
then
echo "You are selected in group C."
else
echo "You are not selected".
fi出力:
スクリプトを8723の値で実行した後、次の出力が表示されます:
スクリプトを9078の値で実行した後、次の出力が表示されます:
空の変数をチェックするための「If」ステートメントの使用
変数が空であるかどうかを確認する方法は、次のスクリプトに示されています。このタスクを実行するために、「if」ステートメントでは「-z」オプションが使用されます。
#!/bin/bash
#Take the id value from the user
read -p "Enter your serial number:" serial
#Check whether the variable is empty or not
if [ ! -z $serial ]
then
#Check the input value using 'if-elif-else' statement
if [ $serial == '690' ]
then
echo "You are selected in team-1."
elif [ $serial == '450' ]
then
echo "You are selected in team-2."
else
echo "You are not selected".
fi
else
echo "No serial number is given."
fi出力:
スクリプトを690の値で実行した後に次の出力が表示されます:
入力値が取られない場合、スクリプトを実行した後に以下の出力が表示されます:
論理演算子を用いた「もし」文の使い方
Bash の条件文では三種類の論理演算子を使用できます。これらは論理和(||)、論理積(&&)、および論理否定(!)です。コードの値はユーザーから取得されます。入力された値が空でない場合、その値は論理和を使用して二つのコード値と照合されます。値がいずれかのコードと一致する場合、対応するメッセージが印刷されます。一致するコードが見つからない場合、デフォルトのメッセージが印刷されます。
#!/bin/bash
#Take the course code from the user
read -p "Enter the course code:" code
#Check whether the variable is empty or not
if [ ! -z $code ]
then
#Check the input value using the 'if-elif-else' statement
if [[ $code == 'CSE-106' || $code == 'CSE-108' ]]
then
echo "CSE course."
elif [[ $code == 'BBA-203' || $code == 'BBA-202' ]]
then
echo "BBA course."
else
echo "Invalid course code."
fi
else
echo "No course code is given."
fi
出力:
「CSE-108」という入力値でスクリプトを実行した後、次の出力が表示されます:
「BBA-56」という入力値でスクリプトを実行した後、次の出力が表示されます:
入れ子の「if」文の使用
他の「if」条件内で「if」条件が使用されると、それはネストされた「if」ステートメントと呼ばれます。ネストされた「if」を使用する方法は、次のスクリプトに示されています。ユーザーから2つのマーク値を取得します。入力値が空でない場合、最初の「if」条件は「$theory」の値が60以上かどうかを確認します。最初の「if」条件が「true」を返す場合、2番目の「if」条件は「$lab」の値が50以上かどうかを確認します。2番目の「if」条件も「true」を返す場合、成功メッセージが印刷されます。そうでない場合は、失敗メッセージが印刷されます。
#!/bin/bash
#Take the theory mark
read -p "Enter the theory mark:" theory
#Take the lab mark
read -p "Enter the lab mark:" lab
#Check whether the variables are empty or not
if [[ ! -z $theory && ! -z $lab ]]
then
#Check the input values using a nested 'if' statement
if [ $theory -ge 60 ]
then
if [ $lab -ge 50 ]
then
echo "You have passed."
else
echo "You have failed."
fi
else
echo "You have failed."
fi
else
echo "Theory or lab mark is empty."
fi出力:
入力値のどちらか一方または両方が空の場合、次の出力が表示されます:
78を理論点数として、45を実験点数として取ると、以下の出力が表示されます。ここで、2番目の「もし」条件は「偽」を返します。
67が理論点として、56が実験点として取られる場合、次の出力が現れます。ここでは、両方の「もし」条件が「真」を返します:
以下の出力は、理論の点数に50、実験の点数に80を取ると表示されます。ここで、最初の「もし」の条件は「偽」と返します。
ファイルの存在を確認するための「If」ステートメントの使用
ファイルの存在は、bashスクリプトで2つの方法で確認できます。1つは「[]」ブラケットと一緒に「-f」演算子を使用することです。もう1つは「test」コマンドと「-f」演算子を使用することです。ファイル名を取得し、「if」条件と「-f」演算子を使用してファイルの存在を確認します。その後、別のファイル名を取得し、「test」コマンドと「-f」演算子を使用してファイルの存在を確認します。
#!/bin/bash
#Take the filename
read -p "Enter a filename:" fn1
#Check whether the file exists or not without using `test`
if [ -f $fn1 ]
then
echo "$fn1 file exists."
else
echo "$fn1 file does not exist."
fi
#Add newline
echo
#Take another filename
read -p "Enter another filename:" fn2
#Check whether the file exists or not using `test`
if test -f $fn2; then
echo "$fn2 file exists."
#Check whether the file is empty or not using `test`
if test -z $fn2; then
echo "$fn2 file is empty."
else
echo "$fn2 file is not empty."
fi
else
echo "$fn2 file does not exist."
fi出力:
スクリプトを実行し、ファイル名として「test.txt」と「testing.txt」を使用した後、以下の出力が表示されます。出力によると、両方のファイルは現在の場所に存在し、「testing.txt」ファイルは空です。
スクリプトを実行した後、次の出力が表示されます。その際、ファイル名として「f1.txt」と「test.txt」を使用しています。この出力によると、「f1.txt」ファイルは現在の場所には存在せず、「test.txt」ファイルは空ではありません:
ディレクトリの存在を確認するための「If」ステートメントの使用
ディレクトリの存在は、Bashスクリプトでファイルと同様に2つの方法で確認できます。1つは「[]」ブラケットと「-d」オペレーターを使用する方法です。もう1つは「test」コマンドと「-d」オペレーターを使用する方法です。ディレクトリ名を取得し、「if」条件と「-d」オペレーターを使用してディレクトリの存在を確認します。次に、別のディレクトリ名を取得し、「test」コマンドと「-d」オペレーターを使用してファイルの存在を確認します。
#!/bin/bash
#Take a directory name
read -p "Enter a directory name:" dir1
#Check whether the directory exists or not without using `test`
if [ -d $dir1 ]
then
echo "$dir1 directory exists."
else
echo "$dir1 directory does not exist."
fi
#Add newline
echo
#Take another directory name
read -p "Enter another directory name:" dir2
#Check whether the file exists or not using `test`
if test -d $dir2
then
echo "$dir2 directory exists."
else
echo "$dir2 directory does not exist."
fi出力:
スクリプトを「temp」と「files」というディレクトリ名で実行した後、次の出力が表示されます。出力によると、両方のディレクトリは現在の場所に存在します。その後、「ls」コマンドが実行され、ディレクトリの内容が確認されます。
スクリプトを「testing」と「new」というディレクトリ名で実行した後、以下の出力が表示されます。出力によると、現在の場所に両方のディレクトリは存在しません。その後、「ls」コマンドの出力は、両方のディレクトリが存在しないことを示しています。
正規表現と「もし」ステートメントの使用
以下のスクリプトは、正規表現を使用した「if」文を使って入力データを検証する方法を示しています。ここでは、ユーザーから取得した2つの入力値が「$bookname」と「$bookprice」変数に格納されます。「if」条件は、スクリプトで「$bookname」変数がすべてのアルファベット文字を含むかどうかと、「$bookprice」が数字を含むかどうかを確認するために使用されます。
#!/bin/bash
#Take the book name and price from the user
echo -n "Enter the book name:"
read bookname
echo -n "Enter the book price:"
read bookprice
#Check the book name contains the alphabet only
if ! [[ "$bookname" =~ [A-Za-z] ]]; then
echo "Book name is invalid."
else
echo "Book name is valid."
fi
#Check the book price contains digit only
if ! [[ "$bookprice" =~ [0-9] ]]; then
echo "Book price can contain digit only."
else
echo "Book price is valid."
fi出力:
「Bash Programming」という書名と78という書籍価格の入力値でスクリプトを実行した後、以下の出力が表示されます:
スクリプトを実行し、入力値として90を本の名前、“Bash ”を本の価格として使用した後、以下の出力が表示されます:
「ケース」ステートメントの使用
「case」文は「if-elif-else」文の代替ですが、「if-elif-else」文で行えるすべてのタスクは「case」文を使って行うことはできません。「case」文の簡単な使用法は、以下のスクリプトに示されています。数値が現在の月としてユーザーから取得されます。そして、「case」文で一致する値が見つかれば対応する月が印刷されます。そうでなければ、デフォルトメッセージが印刷されます。
#!/bin/bash
#Take the current month value in number
read -p "Enter the month of today in number:" b_month
#Print the text before printing the month name
echo -n "The current month name is "
#Find out and print the matching month name based on the input
case $b_month in
1|01) echo "January." ;;
2|02) echo "February." ;;
3|03) echo "March." ;;
4|04) echo "April." ;;
5|05) echo "May." ;;
6|06) echo "June." ;;
7|07) echo "July." ;;
8|08) echo "August." ;;
9|09) echo "September." ;;
10) echo "October." ;;
11) echo "November." ;;
12) echo "December." ;;
*) echo "not found." ;;
esac出力:
スクリプトを値6で実行した後、次の出力が表示されます。
スクリプトを09の値で実行した後に次の出力が表示されます:
スクリプトを実行した後、値が14のとき次の出力が表示されます:
結論
このチュートリアルの10の例では、「if」と「case」文を使用した条件論理の異なる使い方が示されています。このチュートリアルを読むことで、新しいBashユーザーのためにBashにおける条件論理の概念が明確になるでしょう。





















