쉘 연산자


Shell은 다른 프로그래밍 언어와 마찬가지로 다음을 포함한 다양한 연산자를 지원합니다.

  • 산술 연산자

  • 관계 연산자

  • 부울 연산자

  • 문자열 연산자

  • 파일 테스트 운영자

기본 bash는 간단한 수학 연산을 지원하지 않지만 awk 및 expr과 같은 다른 명령을 통해 수행할 수 있으며 expr이 가장 ​​일반적으로 사용됩니다.

expr은 표현식 계산 도구입니다. 이를 사용하여 표현식 평가 작업을 완료할 수 있습니다.

예를 들어 두 개의 숫자를 추가합니다(작은따옴표 ' 대신 백틱`이 사용됨):

#!/bin/bash

val=`expr 2 + 2`
echo "两数之和为 : $val"

Run 인스턴스»

스크립트를 실행하면 출력 결과는 다음과 같습니다.

两数之和为 : 4

두 점 참고 사항:

  • 예를 들어 2+2는 틀리므로 2+2로 써야 하는데, 이는 우리가 익숙한 대부분의 프로그래밍 언어와 다르다.

  • 전체 표현식은 ` `로 묶어야 합니다. 이 문자는 Esc 키 아래에 일반적으로 사용되는 작은따옴표가 아닙니다.


산술 연산자

다음 표에는 변수 a가 10이고 변수 b가 20이라고 가정할 때 일반적으로 사용되는 산술 연산자가 나열되어 있습니다.

운영자 설명
+ 추가 `expr $a + $b` 결과는 30입니다.
- 빼기 `expr $a - $b` 결과는 10입니다.
* 곱셈 `expr $a * $b` 결과는 200입니다.
/ 디비전 `expr $b / $a` 결과는 2입니다.
% 나머지는 가져가세요 `expr $b % $a` 결과는 0입니다.
= 과제 a=$b는 변수 b의 값을 a에 할당합니다.
== 동일한. 두 숫자를 비교하고 같으면 true를 반환하는 데 사용됩니다. [ $a == $b ]는 false를 반환합니다.
!= 같지 않습니다. 두 숫자를 비교하여 동일하지 않으면 true를 반환하는 데 사용됩니다. [ $a != $b ]는 true를 반환합니다.

참고: 조건식은 대괄호 사이에 배치해야 하며 공백이 있어야 합니다. 예: [$a==$b]는 잘못되었으므로 [ $a == $b ]로 작성해야 합니다. .

Instance

산술 연산자 예는 다음과 같습니다.

#!/bin/bash
# author:php中文网
# url:www.php.cn

a=10
b=20

val=`expr $a + $b`
echo "a + b : $val"

val=`expr $a - $b`
echo "a - b : $val"

val=`expr $a \* $b`
echo "a * b : $val"

val=`expr $b / $a`
echo "b / a : $val"

val=`expr $b % $a`
echo "b % a : $val"

if [ $a == $b ]
then
   echo "a 等于 b"
fi
if [ $a != $b ]
then
   echo "a 不等于 b"
fi

스크립트를 실행하면 출력 결과는 다음과 같습니다.

a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a 不等于 b

참고:

  • 곱셈을 수행하려면 곱셈 기호(*) 앞에 백슬래시()가 와야 합니다. if...then...fi는 조건문입니다. 이에 대해서는 나중에 설명하겠습니다.

  • 관계 연산자
관계 연산자는 문자열 값이 숫자가 아닌 한 문자열이 아닌 숫자만 지원합니다.

다음 표에는 변수 a가 10이고 변수 b가 20이라고 가정할 때 일반적으로 사용되는 관계 연산자가 나열되어 있습니다.

운영자 설명 두 숫자가 같은지 확인하고 같으면 true를 반환합니다. 두 숫자가 같은지 확인하고 같지 않으면 true를 반환합니다. 왼쪽의 숫자가 오른쪽의 숫자보다 큰지 확인하고, 그렇다면 true를 반환합니다. 왼쪽의 숫자가 오른쪽의 숫자보다 작은지 확인하여 작은 경우 true를 반환합니다. 왼쪽의 숫자가 오른쪽의 숫자보다 큰지 확인하고, 그렇다면 true를 반환합니다. 왼쪽의 숫자가 오른쪽의 숫자보다 작거나 같은지 확인하고, 그렇다면 true를 반환합니다. 인스턴스 관계 연산자의 예는 다음과 같습니다.
-eq
[ $a -eq $b ]는 false를 반환합니다. -네
[ $a -ne $b ]는 true를 반환합니다. -gt
[ $a -gt $b ]는 false를 반환합니다. -lt
[ $a -lt $b ]는 true를 반환합니다. -ge
[ $a -ge $b ]는 false를 반환합니다. -르
[ $a -le $b ]는 true를 반환합니다.
#!/bin/bash
# author:php中文网
# url:www.php.cn

a=10
b=20

if [ $a -eq $b ]
then
   echo "$a -eq $b : a 等于 b"
else
   echo "$a -eq $b: a 不等于 b"
fi
if [ $a -ne $b ]
then
   echo "$a -ne $b: a 不等于 b"
else
   echo "$a -ne $b : a 等于 b"
fi
if [ $a -gt $b ]
then
   echo "$a -gt $b: a 大于 b"
else
   echo "$a -gt $b: a 不大于 b"
fi
if [ $a -lt $b ]
then
   echo "$a -lt $b: a 小于 b"
else
   echo "$a -lt $b: a 不小于 b"
fi
if [ $a -ge $b ]
then
   echo "$a -ge $b: a 大于或等于 b"
else
   echo "$a -ge $b: a 小于 b"
fi
if [ $a -le $b ]
then
   echo "$a -le $b: a 小于或等于 b"
else
   echo "$a -le $b: a 大于 b"
fi

스크립트를 실행하면 출력 결과는 다음과 같습니다.

10 -eq 20: a 不等于 b
10 -ne 20: a 不等于 b
10 -gt 20: a 不大于 b
10 -lt 20: a 小于 b
10 -ge 20: a 小于 b
10 -le 20: a 小于或等于 b

부울 연산자

다음 표에는 일반적으로 사용되는 부울 연산자가 나열되어 있습니다. 변수 a는 10, 변수 b는 20:

운영자 설명 비연산, 표현식이 true이면 false를 반환하고, 그렇지 않으면 true를 반환합니다. Or 연산은 하나의 표현식이 true인 경우 true를 반환합니다. AND 연산은 두 식이 모두 true인 경우에만 true를 반환합니다.
!
[ !거짓 ] true를 반환합니다. -o
[ $a -lt 20 -o $b -gt 100 ]은 true를 반환합니다. -a
[ $a -lt 20 -a $b -gt 100 ]는 false를 반환합니다.

Example

부울 연산자의 예는 다음과 같습니다.

#!/bin/bash
# author:php中文网
# url:www.php.cn

a=10
b=20

if [ $a != $b ]
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a != $b: a 等于 b"
fi
if [ $a -lt 100 -a $b -gt 15 ]
then
   echo "$a -lt 100 -a $b -gt 15 : 返回 true"
else
   echo "$a -lt 100 -a $b -gt 15 : 返回 false"
fi
if [ $a -lt 100 -o $b -gt 100 ]
then
   echo "$a -lt 100 -o $b -gt 100 : 返回 true"
else
   echo "$a -lt 100 -o $b -gt 100 : 返回 false"
fi
if [ $a -lt 5 -o $b -gt 100 ]
then
   echo "$a -lt 100 -o $b -gt 100 : 返回 true"
else
   echo "$a -lt 100 -o $b -gt 100 : 返回 false"
fi

스크립트를 실행하면 출력 결과는 다음과 같습니다.

10 != 20 : a 不等于 b
10 -lt 100 -a 20 -gt 15 : 返回 true
10 -lt 100 -o 20 -gt 100 : 返回 true
10 -lt 100 -o 20 -gt 100 : 返回 false

논리 연산자

다음은 Shell의 논리 연산자를 소개합니다. 10이고 변수 b는 20입니다.

문자열 연산자
운영자 설명
&& 논리 AND [[ $a -lt 100 && $b -gt 100 ]] false를 반환합니다
|| 논리 OR [[ $a -lt 100 || $b -gt 100 ]] true를 반환합니다.
다음 표에는 변수 a가 "abc"이고 변수 b가 "efg"라고 가정하고 일반적으로 사용되는 문자열 연산자가 나열되어 있습니다.

운영자


설명

= != -z -n 스트

Example

문자열 연산자 예는 다음과 같습니다.

#!/bin/bash
# author:php中文网
# url:www.php.cn

a=10
b=20

if [[ $a -lt 100 && $b -gt 100 ]]
then
   echo "返回 true"
else
   echo "返回 false"
fi

if [[ $a -lt 100 || $b -gt 100 ]]
then
   echo "返回 true"
else
   echo "返回 false"
fi

스크립트를 실행하면 출력 결과는 다음과 같습니다.

返回 false
返回 true

파일 테스트 연산자

파일 테스트 연산자는 Unix 파일의 다양한 속성을 감지하는 데 사용됩니다.

속성 감지는 다음과 같이 설명됩니다.

두 문자열이 같은지 확인하고 같으면 true를 반환합니다. [ $a = $b ]는 false를 반환합니다.
두 문자열이 같은지 확인하고 같지 않으면 true를 반환합니다. [ $a != $b ]는 true를 반환합니다.
문자열 길이가 0인지 확인하고, 0이면 true를 반환합니다. [ -z $a ]는 false를 반환합니다.
문자열의 길이가 0인지 확인하고, 0이 아니면 true를 반환합니다. [ -n $a ]는 true를 반환합니다.
문자열이 비어 있는지 확인하고 비어 있으면 true를 반환합니다. [ $a ]는 true를 반환합니다.
운영자 설명
-b 파일 파일이 블록 장치 파일인지 확인하고 그렇다면 true를 반환합니다. [ -b $file ]은 false를 반환합니다.
-c 파일 파일이 문자 장치 파일인지 확인하고 그렇다면 true를 반환합니다. [ -c $file ]은 false를 반환합니다.
-d 파일 파일이 디렉토리인지 확인하고 그렇다면 true를 반환합니다. [ -d $file ]은 false를 반환합니다.
-f 파일 파일이 일반 파일(디렉토리나 장치 파일이 아닌)인지 확인하고 그렇다면 true를 반환합니다. [ -f $file ]은 true를 반환합니다.
-g 파일 파일에 SGID 비트가 설정되어 있는지 확인하고 그렇다면 true를 반환합니다. [ -g $file ]은 false를 반환합니다.
-k 파일 파일에 고정 비트가 설정되어 있는지 확인하고, 그렇다면 true를 반환합니다. [ -k $file ]은 false를 반환합니다.
-p 파일 파일이 명명된 파이프인지 확인하고 그렇다면 true를 반환합니다. [ -p $file ]은 false를 반환합니다.
-u 파일 파일에 SUID 비트가 설정되어 있는지 확인하고 그렇다면 true를 반환합니다. [ -u $file ]은 false를 반환합니다.
-r 파일 파일을 읽을 수 있는지 확인하고 읽을 수 있으면 true를 반환합니다. [ -r $file ]은 true를 반환합니다.
-w 파일 파일이 쓰기 가능한지 확인하고 그렇다면 true를 반환합니다. [ -w $file ]은 true를 반환합니다.
-x 파일 파일이 실행 가능한지 확인하고 실행 가능한 경우 true를 반환합니다. [ -x $file ]은 true를 반환합니다.
-s 파일 파일이 비어 있는지(파일 크기가 0보다 큰지) 확인하고, 비어 있지 않으면 true를 반환합니다. [ -s $file ]은 true를 반환합니다.
-e 파일 파일(디렉토리 포함)이 존재하는지 확인하고 존재하는 경우 true를 반환합니다. [ -e $file ]은 true를 반환합니다.


Instance

변수 파일은 "/var/www/php/test.sh" 파일을 나타내며, 크기는 100바이트이고 rwx 권한이 있습니다. 다음 코드는 파일의 다양한 속성을 감지합니다.


#!/bin/bash
# author:php中文网
# url:www.php.cn

a="abc"
b="efg"

if [ $a = $b ]
then
   echo "$a = $b : a 等于 b"
else
   echo "$a = $b: a 不等于 b"
fi
if [ $a != $b ]
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a != $b: a 等于 b"
fi
if [ -z $a ]
then
   echo "-z $a : 字符串长度为 0"
else
   echo "-z $a : 字符串长度不为 0"
fi
if [ -n $a ]
then
   echo "-n $a : 字符串长度不为 0"
else
   echo "-n $a : 字符串长度为 0"
fi
if [ $a ]
then
   echo "$a : 字符串不为空"
else
   echo "$a : 字符串为空"
fi

스크립트를 실행하면 출력 결과는 다음과 같습니다.

abc = efg: a 不等于 b
abc != efg : a 不等于 b
-z abc : 字符串长度不为 0
-n abc : 字符串长度不为 0
abc : 字符串不为空