BASHプログラミング
 Computer >> コンピューター >  >> プログラミング >> BASHプログラミング

6 Bash 条件式の例 ( -e, -eq, -z, !=, [, [[ ..)

Bash 式は、bash 条件ステートメントを形成するために使用される演算子、機能、または値の組み合わせです。条件式は、数値、文字列、または成功時に戻りステータスがゼロになるコマンドを含むバイナリまたは単項式である可能性があります。


ファイルのテストに使用できる条件式がいくつかあります。以下は、役立ついくつかの条件式です。

  • [ -e filepath ] ファイルが存在する場合は true を返します。
  • [ -x filepath ] ファイルが存在し、実行可能であれば true を返します。
  • [ -S filepath ] ファイルが存在し、ソケット ファイルである場合に true を返します。
  • [ expr1 -a expr2 ] 両方の式が true の場合に true を返します。
  • [ expr1 -o expr2 ] 式 1 または 2 のいずれかが真の場合に真を返します。

ファイル、文字列、数値をチェックする条件式については、bash の man ページを参照してください。

Bash の例 1. ファイルの存在を確認する

次の Bash シェル スクリプト コード スニペットは、絶対パスでファイル名を取得し、ファイルが存在するかどうかを確認し、適切な情報をスローします。

$ cat exist.sh
#! /bin/bash
file=$1
if [ -e $file ]
then
	echo -e "File $file exists"
else
	echo -e "File $file doesnt exists"
fi

$ ./exist.sh /usr/bin/boot.ini
File /usr/bin/boot.ini exists

さまざまな bash if ステートメントの種類を理解するには、以前の記事を参照してください。

Bash の例 2. 数値の比較

以下のスクリプトは、ユーザーから 2 つの整数を読み取り、両方の数値が互いに等しいか大きいか小さいかをチェックします。

$ cat numbers.sh
#!/bin/bash
echo "Please enter first number"
read first
echo "Please enter second number"
read second

if [ $first -eq 0 ] && [ $second -eq 0 ]
then
	echo "Num1 and Num2 are zero"
elif [ $first -eq $second ]
then
	echo "Both Values are equal"
elif [ $first -gt $second ]
then
	echo "$first is greater than $second"
else
	echo "$first is lesser than $second"
fi

$ ./numbers.sh
Please enter first number
1
Please enter second number
1
Both Values are equal

$ ./numbers.sh
Please enter first number
3
Please enter second number
12
3 is lesser than 12

Bash スクリプトを初めて使用する場合は、Bash 入門チュートリアルを参照してください。

<センター>

Bash の例 3. 基本的な算術計算機

この例では、入力を読み取ります。これは、bash 変数 (inp1 および inp2) に対して実行する算術演算の一種です。算術演算は、加算、減算、または乗算である可能性があります..

$ cat calculator.sh
#!/bin/bash
inp1=12
inp2=11
echo "1. Addition"
echo "2. Subtraction"
echo "3. Multiplication"
echo -n "Please choose a word [1,2 or 3]? "
read oper

if [ $oper -eq 1 ]
then
	echo "Addition Result " $(($inp1 + $inp2))
else
	if [ $oper -eq 2 ]
	then
		echo "Subtraction Result " $(($inp1 - $inp2))
	else
		if [ $oper -eq 3 ]
		then
			echo "Multiplication Result " $(($inp1 * $inp2))
		else
			echo "Invalid input"
		fi
	fi
fi

$ ./calculator.sh
1. Addition
2. Subtraction
3. Multiplication
Please choose a word [1,2 or 3]? 4
Invalid input

bash の特別なパラメーター ( $*、$@、$#、$$、$!、$?、$-、$_ ) の使用方法を知っていると、スクリプト作成が楽になります。

Bash の例 4. IP アドレスの読み取りと Ping

次のスクリプトは、IP アドレスを読み取り、IP アドレスが到達可能かどうかを確認し、適切なメッセージを出力するために使用されます。

$ cat ipaddr.sh
#!/bin/bash
echo "Enter the Ipaddress"
read ip

if [ ! -z $ip ]
then
	ping -c 1 $ip
	if [ $? -eq 0 ] ; then
		echo "Machine is giving ping response"
	else
		echo "Machine is not pinging"
	fi
else
	echo "IP Address is empty"
fi

$ ./ipaddr.sh
Enter the Ipaddress
10.176.191.106

Pinging 10.176.191.106 with 32 bytes of data:

Reply from 10.176.191.106: bytes=32 time&lt;1ms TTL=128

Ping statistics for 10.176.191.106:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms
Machine is giving ping response

この例では、-z は、ipaddress の長さがゼロの場合に true を返します。 (negate) 演算子は、式が false の場合、if 部分に入って実行します。そのため、IP アドレスが null でない場合、入力して IP アドレスが到達可能かどうかをチェックします。

Bash の例 5. インストーラー スクリプト

ほとんどのパッケージのインストーラー スクリプトは、root ユーザーとしてそれらを実行することを許可しません。スクリプトは実行中のユーザーをチェックし、エラーをスローします。

次のスクリプトでは、実行しているユーザーがルート以外の場合にのみ、Oracle インストーラー スクリプトを実行できます。

$ cat preinstaller.sh
#!/bin/bash
if [ `whoami` != 'root' ]; then
	echo "Executing the installer script"
	./home/oracle/databases/runInstaller.sh
else
	echo "Root is not allowed to execute the installer script"
fi

Executing the script as a root user,
# ./preinstaller.sh
Root is not allowed to execute the installer script

この例では、コマンド whoami の出力が「root」という単語と比較されます。文字列比較の場合 ==、!=、< and を使用し、数値比較には eq、ne、lt、および gt を使用する必要があります。

Bash の例 6. 拡張ブラケット

上記のすべての例では、条件式を囲むために一重括弧のみを使用しましたが、bash では、一重括弧構文の拡張バージョンとして機能する二重括弧を使用できます。

$ cat enhanced.sh
#!/bin/bash
echo "Enter the string"
read str
if [[ $str == *condition* ]]
then
	echo "String "$str has the word \"condition\"
fi

$ ./enhanced.sh
Enter the string
conditionalstatement
String conditionalstatement has the word "condition"
  • [ は test コマンドと同義です。シェルに組み込まれている場合でも、新しいプロセスが作成されます。
  • [[ は新しい改良版であり、プログラムではなくキーワードです。
  • [[ は Korn と Bash によって理解されます。
  • 上記の例では、変数 $str のどこかに「条件」という語句が含まれている場合、条件は真です。
  • これはシェルのグロビング機能で、[[ (二重括弧) を使用する場合にのみサポートされるため、多くの引数を引用符で囲む必要はありません。

  1. rbash –実用的な例で説明された制限付きBashシェル

    Linuxシェル 最も魅力的で強力なGNUの1つです / Linux 電動工具。 Xを含むすべてのアプリケーション はシェル上に構築されており、Linuxシェルは非常に強力であるため、それを使用してLinuxシステム全体を正確に制御できます。 Linuxシェルのもう1つの側面は、システムコマンドを実行すると、その結果を知らずに、または無意識のうちに、潜在的に有害になる可能性があることです。 無知なユーザーであること。この目的のために、制限付きシェルを導入しています。制限付きシェルの詳細、実装されている制限などについて説明します。 rbashとは何ですか? 制限付きシェル は、b

  2. 6 つの実用的な例を含む Bash シェル関数のチュートリアル

    Bash シェル関数は、グループに単一の名前を使用して、後で実行するために複数の UNIX / Linux コマンドをグループ化する方法です。 . Bash シェル関数は、通常の Unix コマンドと同じように実行できます。シェル関数は、それらを解釈するための新しいプロセスを作成することなく、現在のシェル コンテキストで実行されます。bash エイリアスと関数の両方を使用すると、より長い、またはより複雑なコマンドのショートカットを定義できます。ただし、エイリアスは、このチュートリアルで説明されているように、これらの関数が許可する制御フロー、引数、およびその他の巧妙なものを許可しません。 この