Linux 에서 셸 연산 자 상세 설명

9398 단어 셸 스 크 립 트
목차
글 목록
목록
개술
산수 연산 자
관계 (비교) 연산 자
논리 연산 자
문자열 연산 자
파일 테스트 연산 자
개술
Bash 는 다음 을 포함 하여 많은 연산 자 를 지원 합 니 다.
 - 算数运算符 
 - 关系(比较)运算符 
 - 逻辑运算符 
 - 字符串运算符 
 - 文件测试运算符

1. 산수 연산 자
a=10
b=20

산술 연산 자
설명 하 다.
예 를 들다
+
덧셈
결과 30
-
감법
결과 - 10
*
곱셈
결과 200
/
나눗셈
결과 2
%
나머지 를 취하 다
결과 0
=
값 을 부여 하 다
a = $b 변수 b 의 값 을 변수 a 에 할당 합 니 다.
==
대등 하 다.두 숫자 가 같은 지 판단 하면 true 로 돌아 갑 니 다.
[$a = = = $b] true 로 돌아 가기
!=
같 지 않다.두 숫자 가 같은 지 아 닌 지 를 판단 하면 true 로 돌아 갑 니 다.
[$a! = $b] 트 루 로 돌아 가기
其实原生bash不支持简单的数学运算,但是可以通过其他命令来实现,
例如: awk 和 expr命令进行处理计算之后才可以得出结果,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

# 以下几点需要注意:

1.表达式和运算符之间要有空格。
例如: 5+10 是不对的,必须写成 5 + 10,这与我们熟悉的大多数编程语言不一样。

2.完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。

3.乘号(*)前边必须加反斜杠(\)进行转义才能实现乘法运算。


예 를 들 어 설명:
#!/bin/bash

#created by yuki on 20180723
#this script is used for doing ......

a=10
b=20

result=`expr $a + $b`
echo "a + b = $result"

result=`expr $a - $b`
echo "a - b = $result"

result=`expr $a \* $b`
echo "a * b = $result"

result=`expr $b / $a`
echo " b / a = $result"

result=`expr $b % $a`
echo "b % a = $result"

실행 결과:
a + b = 30
a - b = -10
a * b = 200
b / a = 2
b % a = 0

2. 관계 (비교) 연산 자
a=5
b=10

관계 연산 자 포함:
[] 에서 사용 하 는 비교 문자
() 와 [[]} 에서 사용 하 는 비교 문자
설명 하 다.
예 를 들다
-eq
==
이퀄
[$a - eq $b] false 로 돌아 가기
-ne
!=
not equal 의 줄 임 말, 표 가 같 지 않 습 니 다.
[$a - nq $b] true 반환
-gt
>
greater thanl 의 줄 임 말, 표 가 크다.
[$a - gt $b] false 로 돌아 가기
-ge
>=
greater equal 의 줄 임 말, 표 는 같 음 보다 크다.
[$a - ge $b] false 로 돌아 가기
-lt
<
greater equal 의 줄 임 말, 표 는 작 습 니 다.
[$a - lt $b] true 로 돌아 가기
-le
<=
greater equal 의 줄 임 말
[$a - lq $b] true 로 돌아 가기
提示:
1. "表示重定向)。
2. ">"符号意思是大于,要麽:if [[ "$a" >  "$b" ]] 是错误的,要麽:if [ "$a"  \> "$b" ] (即在单[]中需要转义,因为shell也用 表示重定向)。
3. 关系运算符只支持数字(整数),不支持字符串,除非字符串的值是数字(整数)。
4. 条件表达式要放在方括号之间,并且要有空格,例如 [[$a==$b]] 是错误的,必须写成 [[ $a == $b ]]。

예 를 들 어 설명:
#!/bin/bash

#created by yuki on 20180723
#this script is used for doing ......

a=5
b=10

if [ $a -eq $b ]
then
	echo "eq 关系运算结果: a等于b"
else
	echo "eq 关系运算结果: a不等于b"
fi


if [ $a -ne $b ]
then 
	echo "ne 关系运算结果: a不等于b"
else
	echo "ne 关系运算结果: a等于b"
fi


if [ $a -gt $b ]
then
	echo "gt 关系运算结果: a大于b"
else
	echo "gt 关系运算结果: a小于等于b"
fi


if [ $a -lt $b ]
then
	echo "lt 关系运算结果:a小于b"
else
	echo "lt 关系运算结果:a大于等于b"
fi


if [ $a -ge $b ]
then
	echo "ge 关系运算结果:a大于等于b"
else
	echo "ge 关系运算结果:a小于b"
fi


if [ $a -le $b ]
then
	echo "le 关系运算结果:a小于等于b"
else 
	echo "le 关系运算结果:a大于b"
fi

실행 결과:
eq 关系运算结果: a不等于b
ne 关系运算结果: a不等于b
gt 关系运算结果: a小于等于b
lt 关系运算结果:a小于b
ge 关系运算结果:a小于b
le 关系运算结果:a小于等于b

3. 논리 연산 자
[] 에서 사용 하 는 비교 부적
() 와 [[]} 에서 사용 하 는 비교 문자
설명 하 다.
예 를 들다
값 을 부여 하 다
a=10
b=25
-a
&&
연산 과 함께 두 표현 식 이 모두 true 여야 true 로 돌아 갑 니 다.
[$a - lt 20 - a $b - gt 20] 트 루 로 돌아 가기
-o
||
또는 연산, 하나의 표현 식 이 true 이면 true 로 돌아 갑 니 다.
[$a - lt 20 - o $b - gt 100] 트 루 로 돌아 가기
!
!
비 연산, 표현 식 이 true 이면 false 로 돌아 갑 니 다.
[! false] 트 루 로 돌아 갑 니 다.
小结:逻辑操作符使用总结
[ ]中用 -a,-o, !
[[ ]]中用 &&,||, !
test 用法和 [ ]相同

예 를 들 어 설명:
#!/bin/bash

#created by yuki on 20180723
#this script is used for doing ......

a=5
b=10


if [ $a != $b ]
then
	echo "!= 逻辑非运算结果:a不等于b"
else 
	echo "!=逻辑非运算结果: a等于b"
fi

if [ $a -lt 50 -a  $b -gt 8 ]
then
	echo "and 逻辑与运算结果:真"
else
	echo "and 逻辑与运算结果:假"
fi


if [ $a -lt 50 -o $b -gt 12 ]
then
	echo "or 逻辑或运算结果:真"
else
	echo "or 逻辑或运算结果:假"
fi

if [ $a -lt 3 -o $b -gt 8 ]
then
	echo "or 逻辑或运算结果:真"
else
	echo "or 逻辑或运算结果:假"
fi

실행 결과:
!= 逻辑非运算结果:a不等于b
and 逻辑与运算结果:真
or 逻辑或运算结果:真
or 逻辑或运算结果:真

4. 문자열 연산 자
문자열 연산 자 포함:
문자열 연산 자
설명 하 다.
예 를 들다
=
두 문자열 이 같은 지 확인 하면 true 로 돌아 갑 니 다.
[$a = $b] true 반환
!=
두 문자열 이 같은 지 확인 하고, 같 지 않 으 면 true 로 돌아 갑 니 다.
[$a! = $b] 트 루 로 돌아 가기
-z
문자열 길이 가 0 인지, 0 인지 확인 하면 true 로 돌아 갑 니 다.
[- z $b] 트 루 로 돌아 가기
-n
문자열 길이 가 0 인지, 0 이 아 닌 지 확인 하면 true 로 돌아 갑 니 다.
[- n $b] true 로 돌아 가기
str
문자열 이 null 인지, null 이 아 닌 지 확인 하면 true 로 돌아 갑 니 다.
[$b] 트 루 로 돌아 가기
#经测试:
字符串比较用单等号或双等号都可以,而且外边的中括号最好是用双中括号,这样结果比较准确。

예 를 들 어 설명:
[root@myhost ~]# string="abcde"
[root@myhost ~]# if [[ "$string" == abc* ]]; then  echo "abc开头"; else echo "不是"; fi
abc开头
[root@myhost ~]# if [ "$string" == abc* ]; then  echo "abc开头"; else echo "不是"; fi
不是
[root@myhost ~]# if [ "$string" = abc* ]; then  echo "abc开头"; else echo "不是"; fi
不是
[root@myhost ~]# if [[ "$string" = abc* ]]; then  echo "abc开头"; else echo "不是"; fi
abc开头

[root@myhost ~]# string="abcde"
[root@myhost ~]# if [[ "$string" = "abc*" ]]; then  echo "不相等"; else echo "不等"; fi
不等
[root@myhost ~]# if [[ "$string" == "abc*" ]]; then  echo "不相等"; else echo "不等"; fi
不等
[root@myhost ~]# if [ "$string" == "abc*" ]; then  echo "不相等"; else echo "不等"; fi
不等
[root@myhost ~]# if [ "$string" = "abc*" ]; then  echo "不相等"; else echo "不等"; fi
不等

예 를 들 어 설명:


#!/bin/bash

#created by yuki on 20180723
#this script is used for doing ......

a="cfe"
b="efr"

if [ "$a" = "$b" ]
then 
	echo "字符串a和字符串b相等"
else
	echo "字符串a和字符串b不相等"
fi

if [ "$a" == "$b" ]
then 
	echo "字符串a和字符串b相等"
else
	echo "字符串a和字符串b不相等"
fi

[root@myhost ~]# a="cfe"
[root@myhost ~]# b="efr"
[root@myhost ~]# if [ "$a" =="$b" ]
> then 


############## end ####################################

if [ "$a" != "$b" ]
then
	echo "字符串a和字符串b不相等"
else
	echo "字符串a和字符串b相等"
fi

if [ -z "$a" ]
then
	echo "字符串a的长度为0,即字符串a为空?"
else
	echo "字符串a的长度不为0"
fi 

if [ -n "$a" ]
then
	echo "字符串a的长度不为0"
else
	echo "字符串a的长度为0,即字符串a为空?"
fi

if [ "$a" ]
then
	echo "字符串a不为空"
else
	echo "字符串不为空"
fi

실행 결과:
字符串a和字符串b不相等
字符串a的长度不为0
字符串a的长度不为0
字符串a不为空

5. 파일 테스트 연산 자
파일 테스트 연산 자 포함:
파일 테스트 연산 자
설명 하 다.
예 를 들다
-b
파일 이 블록 장치 파일 인지 검사 합 니 다. 그렇다면 true 로 돌아 갑 니 다.
[- b $file] true 반환
-c
파일 이 문자 장치 파일 인지 검사 합 니 다. 그렇다면 true 로 돌아 갑 니 다.
[- c $file] true 반환
-d
파일 이 디 렉 터 리 파일 인지 검사 합 니 다. 그렇다면 true 로 돌아 갑 니 다.
[- d $file] true 반환
-f
파일 이 일반 파일 인지 검사 합 니 다 (디 렉 터 리 도 장치 파일 도 아 닙 니 다). 그렇다면 true 로 돌아 갑 니 다.
[- f $file] true 반환
-g
파일 에 SGID 비트 가 설정 되 어 있 는 지 확인 하고, 만약 그렇다면 true 로 되 돌려 줍 니 다.
[- g $file] true 반환
-k
파일 에 붙 어 있 는 위치 (stucky Bit) 가 설정 되 어 있 는 지 확인 하고, 만약 그렇다면 true 로 돌아 갑 니 다.
[- k $file] true 반환
-p
파일 의 서명 파이프 여 부 를 검사 합 니 다. 그렇다면 true 로 돌아 갑 니 다.
[- p $file] true 반환
-u
파일 에 SUID 비트 가 설정 되 어 있 는 지 확인 하고, 만약 그렇다면 true 로 되 돌려 줍 니 다.
[- u $file] true 반환
-r
파일 을 읽 을 수 있 는 지 확인 하고, 만약 그렇다면 true 로 돌아 갑 니 다.
[- r $file] true 반환
-w
파일 을 쓸 수 있 는 지 확인 하고, 만약 그렇다면 true 로 돌아 갑 니 다.
[- w $file] true 반환
-x
파일 이 실 행 될 수 있 는 지 확인 하고, 만약 그렇다면 true 로 돌아 갑 니 다.
[- x $file] true 반환
-s
파일 이 비어 있 지 않 은 지 검사 합 니 다 (파일 크기 가 0 이 아 닌 지). 0 이 아니라면 true 로 돌아 갑 니 다.
[- s $file] true 로 돌아 가기
-e
파일 (디 렉 터 리 포함) 이 존재 하 는 지 확인 하고 존재 하면 true 로 돌아 갑 니 다.
[- e $file] true 로 돌아 가기
-a
파일 (디 렉 터 리 포함) 이 존재 하 는 지 확인 하고 존재 하면 true 로 돌아 갑 니 다.
[- e $file] true 로 돌아 가기
文件测试运算符用于检测 Unix 文件的各种属性,-a已经被弃用了。

예 를 들 어 설명:
예 를 들 어 변수 file 은 파일 '/etc/rc. d/rc. local' 을 표시 합 니 다. 크기 는 220 kb 이 고 소유자 루트 사용 자 는 rwx 권한 을 가지 고 있 습 니 다.
[root@myhost ~]# ll /etc/rc.d/rc.local
-rwxr-xr-x 1 root root 220 Oct  4  2017 /etc/rc.d/rc.local

다음 코드 는 이 파일 의 각종 속성 을 검사 합 니 다:
#!/bin/bash

#created by yuki on 20180723
#this script is used for doing ......

file="/etc/rc.d/rc.local"

if [ -e $file ]
then
	echo "这个已经存在"
else
	echo "这个不存在"
fi


if [ -r $file ]
then
	echo "当前用户可读此文件"
else
	echo "当前用户没有读此文件的权限"
fi

if [ -w $file ]
then
	echo "当前用户可写此文件"
else 
	echo "当前用户没有写此文件的权限"
fi

if [ -x $file ]
then
	echo "当前用户可以执行此文件"
else
	echo "当前用户没有执行此文件的权限"
fi

if [ -d $file ]
then
	echo "这个是目录"
else	
	echo "这个不是目录"
fi

if [ -f $file ]
then
	echo "这个是普通文件"
else
	echo "这个不是普通文件"
fi

if [ -s $file ]
then
	echo "此文件大小不为0"
else
	echo "此文件大小为0,即文件内容为空"
fi

실행 결과:
这个已经存在
当前用户可读此文件
当前用户可写此文件
当前用户可以执行此文件
这个不是目录
这个是普通文件
此文件大小不为0

좋은 웹페이지 즐겨찾기