[Linux-vim] vim에디터 사용하기 2 - 기본 문법 / 연산 문법 ( $(( )) / let )/if 분기문
# 정리
# 기본 문법
- 파라미터 $0,$1,$2는 명령의 부분들을 변수로 지정한다는 의미이다.
- expr 은 연산자와 숫자 사이에 띄어쓰기를 꼭 넣어줘야 한다.
- 변수=$(명령어)을 대체하여 변수=`명령어` 형태로 명령어나 출력문의 결과 값을 변수값에 저장할 수 있다.
# operator 연산문법
(기본 연산)
//$((수식)) 형태로 연산이 가능하다.
//let 수식, let '수식', let "수식" 형태로 다양하게 연산이 가능하다.
- $(( ))와 달리 +=/-= 등의 연산자 조합을 사용할 수 있다.
-따옴표가 없으면 띄어쓰기를 제거해야한다.
-$1, $2 같은 시스템에서 제공하는 파라미터를 쓰려면, " "를 써야한다.
(vim에디터 사용하기 3 - until 예제 참조)
(추가 팁)
< for문의 조건파트를 제외하고는 대체로 "++변수" 형태로 사용하는 것이 좋다. >
//$((su++)) - ++은 이런 형태로 사용해야한다.
- (예문 참조) ++su는 수가 증가하는데 su++는 증가 안함
* su++는 할당을 하고, ++를 하기 때문에 숫자가 증가하기 전에 이미 할당되면서 효과를 못보는 것이다.
(할당을 안하고 출력문에 ++할 때는 숫자가 증가하는 것을 볼 수 있다.)
# let 명령어를 활용한 연산 연습
//$(( ))를 let' '으로 바꾸면 $(( ))와 달리 +=/-= 등의 연산자 조합을 사용할 수 있다.
//let 수식, let '수식', let "수식" 형태로 다양하게 쓸 수 있다.
-따옴표가 없으면 띄어쓰기를 제거해야한다.
-$1, $2 같은 시스템에서 제공하는 파라미터를 쓰려면, " "를 써야한다.
(vim에디터 사용하기 3 - until 예제 참조)
# if 분기문
//then - (elif) - (else) - fi 로 뼈대를 만든다.
//if((조건)) : ((조건))형태로 괄호를 2개 사용해야 하며, (( ))안이기 때문에 $표시가 없어도 변수 인식 가능하다.
//블록에 { }가 없기 때문에 블록 내부의 변수도 블록 밖에서 효력을 가진다.
//0,1을 조건에 넣어 참, 거짓으로 표현할 수 있다.
# 기본 문법
//echo는 "문자열"과 $(변수) 사이에 띄어쓰기를 인식하여 출력해준다.
//파라미터 $0,$1,$2는 명령의 부분들을 변수로 지정한다는 의미이다.
- 명령어 ./sh01hello.sh 111 222 >> $0 - h01hello.sh / $1 - 111 / $2 - 222
//expr 은 연산자와 숫자 사이에 띄어쓰기를 꼭 넣어줘야 한다.
//변수=$(명령어)을 대체하여 변수=`명령어` 형태로 명령어나 출력문의 결과 값을 변수값에 저장할 수 있다.
#!/bin/bash
clear
pwd
echo $0
echo "----------------------------"
#-e option >> enable interpretation of backslash escape
#\n >> new line
echo -e "Hello \nLinux"
#%s >> string will be inserted
printf "name : %s\n" "kim"
#$(( ))means calculate inside ()
echo $((11+22+33))
#Don't forget spacebar between (oprator & string) when use expr
expr 11+22+33
expr 11 + 22 + 33
#variable
kor=99
echo $kor
var_pwd=$(pwd)
echo $var_pwd
#command following sentence >> ./sh01hello.sh 111 222
echo $1 + $2 = $(($1+$2))
result=$(expr 11 + 22 + 33)
echo result: $result
echo result:$result
#``<< it would be confuse. better to use $()
result=`expr 11 + 22 + 33`
echo result:$result
exit 0
# operator 연산 문법 1
// xor - 두 개중 한 개만 참일 때 true반환
// A<<B - A의 이진수를 B만큼 왼쪽으로 이동(shift)
- 이진법이므로 단위 수가 올라갈 수록(좌측으로 갈 수록) 값이 2배가 된다. >> 좌측 이동은 2배, 우측 이동은 1/2배
#!/bin/bash
clear
pwd
echo $0
echo "----------------------------"
#+ - * / % **
echo $((10 + 3))
echo $((10 - 3))
echo $((10 * 3))
echo $((10 / 3))
echo $((10 % 3))
echo $((10 ** 3))
#logic & | ^
#10 - 1010 / 3 - 0011
echo $((10 & 3))
echo $((10 | 3))
echo $((10 ^ 3))
#shift >> <<
echo $((10 >> 3))
echo $((10 << 3))
#bool > < >= <= != ==
echo $((10 > 3))
echo $((10 < 3))
echo $((10 >= 3))
echo $((10 <= 3))
echo $((10 != 3))
echo $((10 == 3))
exit 0
-------------------------------------------
# operator 연산 문법 2
< for문의 조건파트를 제외하고는 대체로 "++변수" 형태로 사용하는 것이 좋다. >
//$((su++)) - ++은 이런 형태로 사용해야한다.
- (예문 참조) ++su는 수가 증가하는데 su++는 증가 안함
* su++는 할당을 하고, ++를 하기 때문에 숫자가 증가하기 전에 이미 할당되면서 효과를 못보는 것이다.
(할당을 안하고 출력문에 ++할 때는 숫자가 증가하는 것을 볼 수 있다.)
echo "----------------------------"
su=10
su=$((++su))
echo $su
su=$((++su))
echo $su
su=$((++su))
echo $su
su=$((su++))
echo $su
su=$((su++))
echo $su
su=$((su++))
echo $su
echo $((su++))
echo $((su++))
echo $((su++))
# let 명령어를 활용한 연산 연습
//$(( ))를 let' '으로 바꾸면 $(( ))와 달리 +=/-= 등의 연산자 조합을 사용할 수 있다.
//let 수식, let '수식', let "수식" 형태로 다양하게 쓸 수 있다.
-따옴표가 없으면 띄어쓰기를 제거해야한다.
-$1, $2 같은 시스템에서 제공하는 파라미터를 쓰려면, " "를 써야한다.
(vim에디터 사용하기 3 - until 예제 참조)
#!/bin/bash
clear
pwd
echo $0
echo "----------------------------"
kor=10
#$kor is recognizing as string value without $(( ))
plus1=$kor+10
plus2+=$kor+20
plus3=$((kor+30))
plus4=$((plus_40+40))
echo $plus1
echo $plus2
echo $plus3
echo $plus4
let 'su1 = 20'
let su2=su1+100
echo $su1 $su2
let 'su2 += 10000'
echo $su1 $su2
let 'su2 -= 10000'
echo $su1 $su2
let "su2 *= 10000"
echo $su1 $su2
let "su2 /= 10000"
echo $su1 $su2
exit 0
# if 분기문
//then - (elif) - (else) - fi 로 뼈대를 만든다.
//if((조건)) : ((조건))형태로 괄호를 2개 사용해야 하며, (( ))안이기 때문에 $표시가 없어도 변수 인식 가능하다.
//블록에 { }가 없기 때문에 블록 내부의 변수도 블록 밖에서 효력을 가진다.
//0,1을 조건에 넣어 참, 거짓으로 표현할 수 있다.
- ex. if((1));then
//성적처리 예제 mission
#!/bin/bash
clear
pwd
echo $0
echo "----------------------------"
#0-false / 1-true
if((0));then
echo aaa
fi
if((1));then
echo bbb
fi
echo "----------------------------"
su1=10
su2=100
#not nessasery to use '$' in (())
if((su1>=su2));
then
echo ccc
else
echo ddd
fi
echo "----------------------------"
su3=10
#if - if
if((su3>=10));
then
echo odd
if((su3%2==0));
then
echo even
fi
fi
echo "----------------------------"
#grade process mission
avg=82
if((avg>=90));then
echo A
elif((avg>=80));then
echo B
elif((avg>=70));then
echo C
elif((avg>=60));then
echo D
else
echo F
fi
exit 0