SHELL 스 크 립 트 의 수치 연산, 조건 테스트 및 if 순환 구조
A: 정수 연산
expr
乘法操作应采用 \* 转义,避免被作为Shell通配符;参与运算的整数值与运算操作符之间需要以空格分开,引用变量时必须加$符号。
例:X=1234 //定义变量
expr $X + 78 //加法expr $X + 78 //加法
expr $X - 78 //减法
expr $X \* 78 //乘法,操作符应添加\转义
expr $X / 78 //除法,仅保留整除结果
expr $X % 78 //求模
$[ ] 或$(())
乘法操作*无需转义,运算符两侧可以无空格;引用变量可省略 $ 符号;计算结果替换表达式本身,可结合echo命令输出。
例:echo $[X+78]
echo $[X-78]
echo $[X*78]
echo $[X/78]
echo $[X%78]
let
expr或$[]、$(())方式只进行运算,并不会改变变量的值;而let命令可以直接
对变量值做运算再保存新的值。因此变量X=1234,在执行let运算后的值会变
更,另外,let运算操作并不显示结果,但是可以结合echo命令来查看:
例:let y=X+22
echo $y
let X++; echo $X # X++(X=X+1)
let X--; echo $X # X--(X=X-1)
let X+=78 ; echo $X # X+=78(X=X+78)
let X-=78 ; echo $X # X-=78(X=X-78)
let X*=78 ; echo $X # X*=78(X=X*78)
let X/=78 ; echo $X # X/=78(X=X/78)
let X%=78 ; echo $X # X%=78(X=X%78)
B: 소수 연산 bc 상호작용 은 먼저 bc 명령 을 실행 하고 상호작용 환경 에 들 어간 다음 에 계산 할 표현 식 을 입력 합 니 다.예: bc 12.34 + 56.78//덧셈 12.34 - 56.78//뺄셈 12.3456.78//곱셈 12.34/56.78//나눗셈 quit//인 터 랙 티 브 계산기 echo 'scale = n 종료;연산 식 '| bc 비 상호작용 예: echo' scale = 4;12.34+5.678’ | bc echo 'scale=4;12.345.678’ | bc echo ‘scale=4;12.34/5.678’ | bc
조건 테스트
• 문자열 일치 • 전체 수치의 크기 비교 • 파일/디 렉 터 리 의 상 태 를 식별 • 여러 조건/작업 의 논리 조합 문법 형식 test 표현 식 또는 [표현 식]
문자열 비교
= = 두 문자열 이 같은 지 비교 합 니 다! =두 문자열 의 다른 예 를 비교 합 니 다: [$USER = = "root"]/echo $를 테스트 합 니까?/보기 결과 0 이 맞습니다. 0 이 아 닌 오류 입 니 다. [$USER! = "root"] echo $?조건 부 테스트 작업 자체 에 어떠한 정보 도 표시 되 지 않 습 니 다.테스트 조건 이 성립 되 는 지 여 부 는 주로 명령 이 실 행 된 후의 반환 상태 (즉?) 에 나타 나 기 때문에 테스트 후 변 수 를 볼 수 있 습 니 다.)그래서 테스트 후 변 수 를 볼 수 있 습 니까?)그래서 테스트 후에 변 수 를 볼 수 있 습 니까?의 값 으로 판단 하거나 &, | | 등 논리 적 조작 을 결합 하여 결 과 를 나타 낸다 (또는 다른 조작 을 한다).A & & B//A 명령 이 실 행 될 때 만 B 명령 A | B//A 명령 이 실 행 될 때 만 B 명령 A 를 실행 합 니 다.B//A 명령 을 실행 한 후 B 명령 을 실행 합 니 다. 둘 은 논리 적 인 관계 가 없습니다.
한 줄 에 여러 명령 을 수행 하 는 경우 & & |;A && B || C
- z 변수의 값 이 빈 - n 또는! -z 검 측 변수의 값 은 비어 있 지 않 습 니 다: var 1 = "nb";var2=""
[ -z "$var1" ] && echo "空值" || echo "非空值"
非空值
[ -z $var2 ] && echo "空值" || echo "非空值
空值
//变量var2已设置,但无任何值,视为空
[ ! -z $var1 ] //测试var1是否为非空
전체 수치 비교 eq lt ge ne le lt
비교 하 는 수 치 는 정수 가 아 닌 정수 로 비교 해 야 합 니 다. 기본 형식 을 잘못 보고 할 수 있 습 니 다. [$a - gt 10]//소수 비교 인식 파일/디 렉 터 리 의 상태 - e (대상 이 존재 하 는 지, 디 렉 터 리 든 파일 이 든) - d (대상 이 디 렉 터 리 인지, 존재 하 는 지, 디 렉 터 리 인지 판단) - f (대상 이 파일 인지, 존재 하 는 지, 파일 인지 판단) - r(대상 이 읽 을 수 있 는 지 판단) - w (대상 이 쓸 수 있 는 지 판단) - x (대상 이 실행 가능 한 권한 이 있 는 지 판단)
형식: A & & B | C 예: [- e/etc/fstab] & & echo "xxx"| | echo "xxxx"여러 조건/작업 의 논리 적 조합 & & 논리 와 주어진 조건 이 성립 되 어야 전체 테스트 결과 가 진실 입 니 다. 예: X = 20//설정 X 변수의 값 은 20 입 니 다.
[ $X -gt 10 ] && [ $X -lt 30 ] && echo "YES"
YES
| | 논리 또는 그 중의 한 조건 만 성립 되면 전체 테스트 결 과 는 실제 사례 입 니 다. [- w "/tmp/"] | [- w "/var/spool/"] & echo "OK"OK 3, if 선택 구조 A: 단일 분기 if 조건 테스트 then 명령 시퀀스 fi 예: 검 측/media/cdrom 디 렉 터 리 가 존재 하지 않 으 면 1.\# vim mountdir. sh 2.\#!/bin/bash 3. dir = "/media/cdrom/"4. if[ ! -d $dir ];then 6. mkdir -p $dir 7. fi # chmod +x mountdir.sh
B: 두 갈래 if 조건 테스트 then 명령 시퀀스 1 else 명령 시퀀스 2 fi 예: 지정 한 호스트 가 ping 이 가능 한 지 확인 하고 판단 합 니 다.
ping -c 3 -i 0.2 -W 1 $1 &> /dev/null
if [ $? -eq 0 ] ; then
echo "Host $1 is up."
else
echo "Host $1 is down."
C: 다 분기 if 조건 테스트 1; then 명령 서열 1 elif 조건 테스트 2; then 명령 서열 2 else 명령 서열 n fi 예: 키보드 에서 하나의 포럼 포 인 트 를 읽 고 포럼 사용자 의 등급 이 90 신공 절 세 보다 크 면 80 이상 이 고 90 보다 작 으 면 70 이상 이 며 80 보다 작 으 면 60 이상 이 고 70 보다 작 으 면 60 초보 자 1 보다 약간 작 습 니 다.# vim grade.sh
2. #!/bin/bash
3. read -p "请输入积分(0-100):" JF
4. if [ $JF -ge 90 ] ; then
5. echo "$JF 分,神功绝世"
6. elif [ $JF -ge 80 ] ; then
7. echo "$JF 分,登峰造极"
8. elif [ $JF -ge 70 ] ; then
9. echo "$JF 分,炉火纯青"
10. elif [ $JF -ge 60 ] ; then
11. echo "$JF 分,略有小成"
12. else
13. echo "$JF 分,初学乍练"
14. fi
# chmod +x grade.sh
보충: ping 테스트 시간 을 절약 하기 위해 3 개의 테스트 패키지 (- c 3) 만 보 내 고 테스트 패 키 지 를 보 내 는 간격 초 수 (- i 0.2) 를 단축 시 키 며 피드백 을 기다 리 는 시간 초과 초 수 (- W 1) 예:\# ping - c 3 - i 0.2 - W 1 192.168.4.5
주: 부족 하면 제때에 제출 하 세 요. 감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.