Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

6 Bash 조건식 예제 ( -e, -eq, -z, !=, [, [[ ..)

Bash 표현식은 bash 조건문을 구성하는 데 사용되는 연산자, 기능 또는 값의 조합입니다. 조건식은 숫자, 문자열 또는 성공 시 반환 상태가 0인 명령을 포함하는 이진 또는 단항 표현식일 수 있습니다.


파일을 테스트하는 데 사용할 수 있는 몇 가지 조건식이 있습니다. 다음은 도움이 되는 몇 가지 조건식입니다.

  • [ -e filepath ] 파일이 있으면 true를 반환합니다.
  • [ -x filepath ] 파일이 존재하고 실행 가능하면 true를 반환합니다.
  • [ -S filepath ] 파일이 존재하고 소켓 파일이 있으면 true를 반환합니다.
  • [ expr1 -a expr2 ] 두 표현식이 모두 참이면 참을 반환합니다.
  • [ expr1 -o expr2 ] 식 1 또는 2 중 하나가 참이면 참을 반환합니다.

파일, 문자열 및 숫자를 확인하는 더 많은 조건식에 대해서는 bash 매뉴얼 페이지를 참조하십시오.

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. 숫자 비교

아래 스크립트는 사용자로부터 두 개의 정수를 읽고 두 숫자가 서로 같거나 크거나 작은지 확인합니다.

$ 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의 길이가 0이면 true를 반환하고 조건 앞에 ! (부정) 연산자, 표현식이 거짓이면 if 부분에 들어가 실행합니다. 따라서 IP 주소가 null이 아닌 경우 해당 IP 주소에 도달할 수 있는지 여부를 입력하여 확인합니다.

Bash 예제 5. 설치 프로그램 스크립트

대부분의 패키지의 설치 프로그램 스크립트는 루트 사용자로 실행할 수 없습니다. 스크립트는 실행 중인 사용자를 확인하고 오류를 발생시킵니다.

다음 스크립트를 사용하면 실행 중인 사용자가 루트가 아닌 경우에만 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"
  • [는 테스트 명령의 동의어입니다. 셸에 내장되어 있어도 새 프로세스를 만듭니다.
  • [[는 프로그램이 아니라 키워드인 새로운 개선된 버전입니다.
  • [[는 Korn과 Bash가 이해합니다.
  • 위의 예에서 변수 $str에 "condition"이라는 문구가 포함되어 있으면 조건은 참입니다.
  • 이것은 쉘 글로빙 기능으로, [[(이중 괄호)를 사용할 때만 지원되므로 많은 인수를 인용할 필요가 없습니다.