기사 디렉토리
1) let 연산자
let 명령을 사용하여 기본 정수 산술 연산을 수행합니다. let 명령 사용은 다음 사항을 따라야 합니다.
- 정수 연산만 지원됩니다.
$
let을 사용할 때 변수 이름 앞에 부호를 붙일 필요가 없습니다.- 연산자 기호 양쪽에 공백이 없어야 합니다.
- let 결과를 받을 변수가 있어야 합니다.
- let은 기본 연산 원리를 지원합니다: 먼저 곱셈과 나눗셈, 그 다음 덧셈과 뺄셈, 괄호 안의 연산 먼저
형식:let res=x+y
, x 및 y는 할당된 변수여야 하며 변수는 정수여야 하며 res는 x+y의 결과를 받는 데 사용됩니다.
자체 증가(++), 자체 감소(- -) 연산
증가(++) 및 감소(- -)는 변수의 값을 변경합니다.
자동 추가 형식:let x++
let과 변수 사이에 공백이 있고 변수와 ++ 사이에 공백이 없어야 합니다.
자체 감소 형식:let x--
, 쓰기 표준은 동일합니다.
[wjj@learning ~]$ x=1
[wjj@learning ~]$ echo $x
1
[wjj@learning ~]$ let x++
[wjj@learning ~]$ echo $x
[wjj@learning ~]$ let x--
[wjj@learning ~]$ echo $x
1
사전++ 및 사후++
C 언어에서 pre-++와 post-++ 사이에는 분명한 차이가 있습니다.
- Pre-++: 먼저 ++를 한 다음 실행
- Post ++: 먼저 실행, ++ 마지막에 실행
Shell은 C언어로 개발되었기 때문에 Shell의 pre-++와 post-++도 위의 원칙을 따른다.
예 1:
x=1 y=1
let z=(x++)+y;echo "z=$z x=$x y=$y"
z=2 x=2 y=1
- 당연히 post++의 연산 우선순위는 더 낮습니다.
- 연산 중에 ++ 연산이 있으면 괄호로 묶어야 합니다.
- post ++이므로 먼저 실행되고
z=x+y
마지막에 실행됩니다.x++
예 2:
x=1 y=1
let z=(++x)+y;echo "z=$z x=$x y=$y"
z=3 x=2 y=1
- Front ++가 우선 순위가 더 높습니다.
- 먼저 실행
++x
, 나중에 실행x+y
**참고: **자체 증가 및 자체 감소 연산은 계산 매개변수에만 적용 가능하며 x y
let 명령을 받는 매개변수에는 적용되지 않습니다.z
+=, -=, *= 및 /=
Shell의
+=
AND 연산자-=
는 C 언어와 동일합니다.
let x+=y
에 해당let x=x+y
let x-=y
에 해당let x=x-y
let x*=y
에 해당let x=x*y
let x/=y
에 해당let x=x/y
2) (( )) 연산자
(( ))
let과 마찬가지로 기본 정수 산술 연산을 지원하며 다음 사항을 준수해야 합니다.
- 정수 연산만 지원됩니다.
- 연산은 가장 안쪽 괄호 안에 기록됩니다.
- 연산자 기호 양쪽에 공백이 있을 수 있습니다.
- 변수를 사용하여 결과를 받거나 받지 않을 수 있습니다.
- 논리 연산 지원
예 1:
echo $((1 + 1))
2
echo $((z = 1 + 1))
2
echo $z
2
- 괄호 안의 쓰기 사양은 공백을 허용합니다.
$
추출 작업의 결과를 사용할 수 있습니다.
예 2:
x=1 y=1
echo $((z=(x++)+y))
2
echo $((z += 1))
3
- pre-++, post-++, += 및 -=에도 동일하게 적용됩니다.
3) [ ] 연산자
[ ]
연산자의 사용법은 다음 두 가지와 대략 동일합니다.
- 정수 연산만 지원됩니다.
- 액세스 변수는 접두사를 사용하거나 사용하지 않고
[]
사용할 수 있습니다 .$
$
- 논리 연산 지원
예 1:
echo $[1 + 2]
3
x=$[1 + 2]; echo $x
3
[ ]
공백이 허용됩니다.- 변수 없이 계산 결과를 받을 수 있습니다.
예 2:
y=1
x=$[$y + 1]; echo $x
2
[]
변수에 대한 액세스가 허용되며 변수 이름 앞에 기호를 추가해야 합니다.$
예 3:
y=1
x=$[$y + ((1+2))]; echo $x
4
x=$(( $y + $[1+2])); echo $x
4
[]
변수에 대한 액세스가 허용되며 변수 이름 앞에 기호를 추가해야 합니다.$
[]
및(())
및 는 다음을 사용하여 서로 중첩됩니다.
4) 논리적 판단
Shell은 C언어의 논리적 판단과 호환되며, 연산에 다음 기호가 나타날 때 논리적 판단을 나타냅니다.
상징 | 설명하다 |
---|---|
||또는| | 논리적 또는 |
&&또는& | 논리적이고 |
>= | 크거나 같음 |
<= | 이하 |
!= | 같지 않다 |
== | 판단과 동등하다 |
논리적 판단이 참이면 1( 참 )을 반환하고, 조건이 참이 아니면 0( 거짓 )을 반환한다.
(())
논리 연산은 다음 []
에서도 지원됩니다 .
a=$[1 > 2 && 1 < 3];echo $a
0
b=$((1 < 2 || 1 > 3));echo $b
1
5) 특급 도구
expr
도구는 기본적인 산술 연산에도 사용할 수 있지만 물론 정수 연산 으로 제한됩니다.
expr
작업을 사용할 때 공백을 추가해야 합니다.expr
논리 연산 지원
예 1:
a=`expr 1 + 2`
a=$(expr $a + 1)
- expr의 각 변수와 연산자에는 공백이 있어야 합니다.
예 2:
a=`expr 1 > 2`; echo $a
0
- expr은 논리 연산도 지원합니다.
6) 기원전 도구
bc
은 수학적 연산을 위한 고급 유틸리티로, 이 정교한 계산에는 많은 옵션이 포함되어 있습니다. 부동 소수점 산술을 수행하고 일부 고급 기능을 사용할 수 있습니다.
예 1: 부동 소수점 계산
echo "4 * 0.5" | bc
2.0
x=10
y=`echo "$x * 0.5" | bc`
echo $x
5.0
bc
작업 제어 접두사는 세미콜론으로 구분하여 허용할 수 있습니다.
예 2: 소수 자릿수 설정
echo "scale=2; 10 / 2 " | bc
5.00
소수점 이하 자릿수는 매개변수 를 통해 2로 설정 scale=2
하므로 인쇄 결과는 소수점 2자리를 유지합니다.
bc
다른 기지의 변환 기능을 실현할 수 있습니다.
예제 3: 16진수 변환
n=10
#二进制
echo "obase=2;$n" | bc
1010
#八进制
echo "obase=8;$n" | bc
12
#十六进制
echo "obase=16;$n" | bc
A
위의 코드는 10진수를 2진수, 8진수 및 16진수로 변환하는 방법을 보여줍니다.
그 중 obase
출력 내용의 이진법을 제어하기 위해 사용되는 출력 제어가 있고, 또한 ibase
입력 수의 이진법을 제어하기 위해 사용되는 입력 제어가 있다.
n=1010
#二进制转换成十进制
echo "obase=10;ibase=2;$n" | bc
**참고: 이전에
ibase
설정해야 합니다变量
! **다음 철자는 모두 정확합니다.
echo "obase=10;ibase=2;$n" | bc
echo "ibase=2;$n;obase=10;" | bc
컴퓨터 읽기 명령의 특성에 따라 이것은 컴퓨터가 변수를 읽을 때 처음에
ibase
입력 제어를 찾을 수 있도록 보장할 수 있습니다. 그렇지 않으면 기본적으로 십진수로 저장됩니다.
예 4: 제곱 및 제곱근 계산
echo "sqrt(100)" | bc
10
echo "2^3" | bc
8
bc
에는 풍부한 수학 함수 라이브러리도 있습니다. 이러한 고급 함수를--mathlib
또는 옵션과 함께 사용하십시오.-l
예 5: 사인 및 코사인
#正弦
echo "s(3.1415926/2)" | bc --mathlib
.99999999999999964101
#余弦
echo "c(0)" | bc --mathlib
1.00000000000000000000
bc
파일 작업도 가능
예 6: 파일에서 계산 완료
cat > bctest.bc << "EOF"
sqrt($a)
2^3
EOF
cat bctest.bc | bc --mathlib
10.00000000000000000000
8
참고: 이 방법은 파이프라인을 통해 파일을 bc로 전달하는 것이므로 파일에서 변수를 사용할 수 없습니다(예: sqrt($a)
인식할 수 없음).