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<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"이라는 문구가 포함되어 있으면 조건은 참입니다.
- 이것은 쉘 글로빙 기능으로, [[(이중 괄호)를 사용할 때만 지원되므로 많은 인수를 인용할 필요가 없습니다.