このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linuxコマンドの基本:シェルスクリプト:if文と&&の活用

シェルスクリプト:if文と&&の活用
シェルスクリプトでは、if 文と論理演算子を組み合わせることで、複数の条件を効率的に評価できます。特に、&&(AND)演算子を使用すると、複数のコマンドの終了ステータスがすべてゼロ(真)である場合にのみ処理を実行することが可能です。ここでは、if 文と && を活用した条件分岐の方法について詳しく解説します。

if文での && の利用
if 文で && を利用すると、複数の条件を連結し、それらすべてが真の場合にのみブロック内の処理が実行されます。これは、複数の test コマンドや他のコマンドを組み合わせて、複雑な条件を簡潔に表現するのに役立ちます。
例1:数値の範囲を判定するスクリプト(if-range.sh)
以下のスクリプトでは、コマンドライン引数で与えられた数値が 5 より大きく、かつ 10 未満であるかを判定します。
スクリプトの作成
user01@ubuntu:~$ nano if-range.shif-range.sh の内容
#!/bin/bash
num=$1
if [ "$num" -gt 5 ] && [ "$num" -lt 10 ]; then
echo "The number $num is greater than 5 and less than 10."
else
echo "The number $num does not meet the criteria."
fi解説
num=$1:コマンドライン引数から数値を取得します。[ "$num" -gt 5 ]:numが 5 より大きいかを判定します。[ "$num" -lt 10 ]:numが 10 より小さいかを判定します。&&:両方の条件が真の場合にのみ、thenブロックが実行されます。
実行権限の付与
user01@ubuntu:~$ chmod +x if-range.shスクリプトの実行例
条件を満たす場合
user01@ubuntu:~$ ./if-range.sh 7
The number 7 is greater than 5 and less than 10.条件を満たさない場合
user01@ubuntu:~$ ./if-range.sh 4
The number 4 does not meet the criteria.解説
7は条件を満たすため、指定したメッセージが表示されます。4は条件を満たさないため、別のメッセージが表示されます。
例2:ユーザーの所属グループを確認するスクリプト(if-group.sh)
以下のスクリプトでは、現在のユーザーが sudo グループに所属しており、かつホームディレクトリが存在するかを確認します。
スクリプトの作成
user01@ubuntu:~$ nano if-group.shif-group.sh の内容
#!/bin/bash
username=$(whoami)
if groups "$username" | grep -q '\bsudo\b' && [ -d "/home/$username" ]; then
echo "User $username is in the sudo group and has a home directory."
else
echo "User $username does not meet the criteria."
fi解説
username=$(whoami):現在のユーザー名を取得します。groups "$username":ユーザーの所属グループを表示します。grep -q '\bsudo\b':sudoグループに所属しているかを確認します。[ -d "/home/$username" ]:ホームディレクトリが存在するかを確認します。&&:両方の条件が真の場合にのみ、thenブロックが実行されます。
実行権限の付与
user01@ubuntu:~$ chmod +x if-group.shスクリプトの実行例
user01@ubuntu:~$ ./if-group.sh
User user01 is in the sudo group and has a home directory.解説
- 現在のユーザーが
sudoグループに所属し、ホームディレクトリが存在する場合に条件を満たします。
if文での || の利用
if 文で || を利用すると、複数の条件のうちいずれかが真の場合に処理を実行できます。
例3:コマンドライン引数のチェック(if-arg.sh)
以下のスクリプトでは、コマンドライン引数が "start" または "stop" のいずれかであるかを判定します。
スクリプトの作成
user01@ubuntu:~$ nano if-arg.shif-arg.sh の内容
#!/bin/bash
action=$1
if [ "$action" = "start" ] || [ "$action" = "stop" ]; then
echo "Action is $action."
else
echo "Invalid action: $action"
fi解説
action=$1:コマンドライン引数からアクション名を取得します。[ "$action" = "start" ]:actionが"start"であるかを判定します。[ "$action" = "stop" ]:actionが"stop"であるかを判定します。||:いずれかの条件が真の場合に、thenブロックが実行されます。
実行権限の付与
user01@ubuntu:~$ chmod +x if-arg.shスクリプトの実行例
有効なアクションの場合
user01@ubuntu:~$ ./if-arg.sh start
Action is start.
user01@ubuntu:~$ ./if-arg.sh stop
Action is stop.無効なアクションの場合
user01@ubuntu:~$ ./if-arg.sh restart
Invalid action: restart解説
"start"または"stop"の場合、アクションが表示されます。- それ以外の場合、無効なアクションとしてエラーメッセージが表示されます。
作成したスクリプトの削除
user01@ubuntu:~$ rm if-range.sh if-group.sh if-arg.shまとめ
if文と&&の組み合わせ:複数の条件がすべて真の場合にのみ処理を実行できます。if文と||の組み合わせ:複数の条件のうち、いずれかが真の場合に処理を実行できます。- 条件式の記述:
[ ]内で条件式を記述し、論理演算子で結合します。 - コマンドの活用:
testコマンド以外にも、grepやgroupsなどのコマンドの終了ステータスを利用できます。 - 柔軟な条件判定:論理演算子を活用することで、複雑な条件判定を簡潔に表現できます。
これらの知識を活用して、シェルスクリプトでより効率的な条件分岐を実現しましょう。
