제2 장: Shell 연산 과 비교

6035 단어
1 절: 변수의 교체
변량
설명 하 다.
${\# 변수}
변수 값 의 길이 가 져 오기
${변수\# 일치 규칙}
처음부터 일치, 최 단 삭제
${변수\#\# 일치 규칙}
처음부터 일치, 최 장 삭제
${변수% 일치 규칙}
끝 부터 일치, 최 단 삭제
${변수% 일치 규칙}
끝 부터 일치, 최 장 삭제
${변수/오래된 문자열/새 문자열}
변수 에 있 는 오래된 문자열 을 새 문자열 로 바 꾸 고 첫 번 째 문자열 만 바 꿉 니 다.
${변수//오래된 문자열/새 문자열}
변수 에 있 는 오래된 문자열 을 새 문자열 로 바 꿉 니 다. 모두 바 꿉 니 다.
${변수: 일치 규칙: 일치 규칙}
색인 및 절편
2 절: 정수 연산
1. expr (수치 사이 에 빈 칸 이 있어 야 함)\# 구방 연산 을 할 수 없습니다
[root@web /scripts/day02]# expr  $a ^ $b        
expr: syntax error

2. $()\# 구 하 는 쪽 을 지원 하지 않 습 니 다.
[root@web /scripts/day02]# echo $(( $a ^ $b ))  
30

3.$[]
[root@web /scripts/day02]# echo $[$a+$b]
30

4. let 계산 횟수, 더하기, 자감
[root@web /scripts/day02]# let a++
[root@web /scripts/day02]# echo $a
11
[root@web /scripts/day02]# let a--
[root@web /scripts/day02]# echo $a
10
[root@web /scripts/day02]# let c=$a+$b
[root@web /scripts/day02]# echo $c
30

제3 절: 소수 연산
1. bc\# 계산기 와 비슷 합 니 다.
[root@web /scripts/day02]# yum install -y bc
[root@web /scripts/day02]# bc  #进入交互式
[root@web /scripts/day02]# echo  $a + $b | bc
30

2. awk 계산
[root@web /scripts/day02]# awk  'BEGIN{print $a + $b }'     #不支持外部变量
0
[root@web /scripts/day02]# awk  'BEGIN{print 10 + 20 }'
30
[root@web /scripts/day02]# awk  'BEGIN{print 10 / 20 }'
0.5
[root@web /scripts/day02]# awk  'BEGIN{print 10 ^ 20 }'
100000000000000000000
[root@web /scripts/day02]# awk  'BEGIN{print 10 / 3 }'
3.33333
[root@web /scripts/day02]# awk  'BEGIN{printf "%.2f
",10 / 3 }' #保留小数点后2位 3.33 [root@web /scripts/day02]# awk 'BEGIN{printf "%.1f
",10 / 3 }' #保留小数点后1位 3.3 #awk内部变量 [root@web /scripts/day02]# awk -va=1 -vb=2 'BEGIN{print a + b }' 3

3.python
[root@web /scripts/day02]# python
echo "print $a + $b " |python
30
[root@web /scripts/day02]# echo "print $a ^ $b " |python
30
[root@web /scripts/day02]# echo "print $a / $b " |python
0
[root@web /scripts/day02]# echo "print $a.0 / $b " |python
0.5
[root@web /scripts/day02]# echo "print $a.0 / 10 " |python
1.0
[root@web /scripts/day02]# echo "print $a.0 / 3 " |python
3.33333333333
[root@web /scripts/day02]# echo "print 10 / 3 " |python
3
[root@web /scripts/day02]# echo "print 10.0 / 3 " |python
3.33333333333

제4 절: 수치 비교
옵션
설명 하 다.
예시
-eq
조건 이 진실 과 같다
[ 1 -eq 10 ]
-ne
같 지 않 으 면 조건 이 진실 이다.
[ 1 -ne 10 ]
-gt
규칙 보다 크 면 조건 이 진실 이다.
[ 1 -gt 10 ]
-lt
작 으 면 조건 이 진실 이다.
[ 1 -lt 10 ]
-ge
같 음 보다 크 면 조건 이 진실 이다.
[ 1 -ge 10 ]
-le
보다 작 으 면 조건 이 진실 이다.
[ 1 -le 10 ]
제5 절: 문자열 비교
1. 문자열 은 따옴표 를 사용 해 야 합 니 다.
[ "name" = "name" ] 
[ "name" != "name" ] 
[root@web ~]# [ "$USER" = "root" ]
[root@web ~]# echo $USER
root
[root@web ~]# [ "$USER" = "root" ]
[root@web ~]# echo $?
0
[root@web ~]# [ "$USER" = "alex" ]
[root@web ~]# echo $?
1
[root@web ~]# [ "$USER" != "alex" ]
[root@web ~]# echo $?
0

2. - z 변수 값 이 비어 있 는 지 판단 하고 비어 있 으 면 반환 값 0
[root@web ~]# name=""
[root@web ~]# [ -z $name ]
[root@web ~]# echo $?
0
[root@web ~]# [ ! -z $name ]
[root@web ~]# echo $?
1
[root@web ~]# name="alex"
[root@web ~]# [ -z $name ]
[root@web ~]# echo $?
1
[root@web ~]# [ -n $name ]
[root@web ~]# echo $?
0
-z 案例:
read -p "请输入名字" name1 
[ -z $name1 ] && echo "请输入姓名否则不继续执行" && exit
read -p "请输入年龄" age1
echo $name1 $age1

제6 절: 정규 비교
1. 이중 괄호 안 을 사용 해 야 정규 비 교 를 할 수 있다 [[]]
[root@web01 scripts]# [ "$USER" = "root" ]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ "$USER" =~ ^r ]]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ "$USER" =~ t$ ]]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ ! "$USER" =~ t$ ]]
[root@web01 scripts]# echo $?
1
案例:判读传参的参数是否为整数
方法1
[root@web01 scripts]# age=188
[root@web01 scripts]# 
[root@web01 scripts]# 
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# age=188q
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]] && echo $?
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]] || echo $?
1
[root@web01 scripts]# age=18.8
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]]
[root@web01 scripts]# echo $?
1
方法2
expr $1 + 0 >/dev/null 2>&1
[ $? -ne 0 ] && exit

제7 절: 다 정수 비교
1. - a/and 를 사용 하고 양쪽 의 조건 이 동시에 성립 되 며 반환 값 은 0 이다.
[ 10 -eq 10 -a 100 -ne 100 ]
[root@web01 scripts]# [ 10 -eq 10 -a 100 -ne 100 ]
[root@web01 scripts]# echo $?
1
[root@web01 scripts]# [ 10 -eq 10 -a 100 -eq 100 ]
[root@web01 scripts]# echo $?
0

2. - o/or 또는 의 미 를 사용 하여 양쪽 의 조건 이 하나 로 성립 되 고 반환 값 은 0 이다.
[root@web01 scripts]# [ 10 -eq 10 -o 100 -ne 100 ]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ 10 -eq 10 && 100 -ne 100 ]]
[root@web01 scripts]# [[ 10 -eq 10 -a 100 -ne 100 ]]
-bash: 条件表达式中有语法错误
-bash: `-a' 附近有语法错误
[root@web01 scripts]# [[ 10 -eq 10 && 100 -ne 100 ]]
[root@web01 scripts]# echo $?
1
[root@web01 scripts]# [[ 10 -eq 10 || 100 -ne 100 ]]
[root@web01 scripts]# echo $?
0

제8 절: 파일 이나 디 렉 터 리 판단
비교 부호
속뜻
예시
-e
파일 이나 디 렉 터 리 가 존재 하면 진짜 입 니 다.
[ -e file ]
-s
파일 이 존재 하고 최소한 한 글자 가 있 으 면 진짜 입 니 다.
[ -s file ]
-d
파일 이 존재 하고 디 렉 터 리 가 진짜 라면
[ -d file ]
-f
파일 이 존재 하고 일반 파일 이 라면 진짜 입 니 다.
[ -f file ]
-r
파일 이 존재 하고 읽 을 수 있다 면 진짜 입 니 다.
[ -r file ]
-w
파일 이 존재 하고 쓸 수 있다 면 진짜 입 니 다.
[ -w file ]
-x
파일 이 존재 하고 실행 가능 하 다 면 진짜 입 니 다.
[ -x file ]

좋은 웹페이지 즐겨찾기