SHELL 스 크 립 트 의 수치 연산, 조건 테스트 및 if 순환 구조

4677 단어
수치 연산
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 이 가능 한 지 확인 하고 판단 합 니 다.
  • vim pinghost.sh
  • #!/bin/bash
  •   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."
    
  • fi

  • chmod +x pinghost.sh

  • 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
    주: 부족 하면 제때에 제출 하 세 요. 감사합니다!

    좋은 웹페이지 즐겨찾기