2019. 10. 5. 14:56ㆍ임베디드/리눅스시스템프로그래밍
쉘 스크립트 문법은 까다로운 부분이 많다. 기본 문법이 있고, 가변적으로 사용할 수 있는 문법도 있다. 다만 가변적인 문법은 개발 환경에 따라서 실행되기도 하고, 아니기도 하기때문에 최대한 기본 문법을 익히는 편이 낫다
이전 포스팅에서 마지막으로 짠 쉘 스크립트 코드다
#!/bin/bash
array_list=("hello" "our" "world")
echo ${array_list[0]}
echo ${array_list[*]}
echo ${array_list[@]}
echo ${#array_list[*]}
filelist=($(ls))
echo ${filelist[*]}
만일 여기서 중괄호를 빼고 출력한다면 어떻게 될까?
#!/bin/bash
array_list=("hello" "our" "world")
# echo ${array_list[0]}
echo $array_list[0]
즉 중괄호를 하지 않는다면 $array_list로 인식해서 디폴트인 0번 인덱스를 출력한다
echo 출력과 더불어 printf도 출력 함수로 사용할 수 있다. echo는 기본적으로 줄바꿈이 되지만, printf는 따로 개행을 넣어야만 한다. 그리고 printf는 형식지정자가 지원된다는 점이 있다
#!/bin/bash
echo "hello world"
printf "hello world\n"
printf "%s %s\n" hello world
쉘 스크립트에는 사전에 정의된 지역 변수 조합이 있다
$$ 쉘 스크립트의 pid
$0 쉘 스크립트의 이름
$1 ~ $9 명령 인수
$* 명령 인수 리스트
$# 명령 인수 리스트 개수
#!/bin/bash
echo $$ $0 $* $#
expr 명령어로 숫자 연산이 가능은 한데, 쉘 스크립트에서는 매우 복잡하게 진행된다
1) 역 작은 따옴표 `로 식을 묶는다. expr부터 묶어야 한다
2) 모든 연산자에 대해서 띄어쓰기로 구분해야만 한다
3) 괄호와 곱하기만 역슬래시로 묶어야 한다
#!/bin/bash
# expr (10+20)/8-8
num=`expr \( 10 + 20 \) / 8 - 8`
echo $num
if 조건문을 사용할 수 있다. 대괄호 [ ]에 condition을 넣을 땐 반드시 양쪽에 공백을 포함해야만 한다. 그렇지 않으면 syntax error를 출력하게 된다. 쉽게 생각해서 then과 fi는 { }로 생각하면 좋다
#!/bin/bash
if [ $1 != $2 ]
then
echo "different"
else
echo "same"
fi
-z -n 옵션으로 널 문자인지 아닌지 확인할 수 있다. -z 옵션은 널 문자이면 참, -n 옵션은 널 문자가 아니라면 참이 된다
#!/bin/bash
num=1
if [ -n $num ]
then
echo "hello world"
fi
1은 널 문자가 아니기 때문에 Hello world를 출력하게 된다
대소비교는 조금 까다롭다 <, >는 가능하지만, <=, >=는 조건문 양쪽을 한 번 더 []로 덮거나 혹은 기초 문법을 사용하는 방법밖에 없다.
#!/bin/bash
# 값1 -gt 값2 : 값1 > 값2 (greater than)
# 값1 -lt 값2 : 값1 < 값2 (lesser than)
# 값1 -ge 값2 : 값1 >= 값2 (greater or equal)
# 값1 -le 값2 : 값1 <= 값2 (lesser or equal)
# 값1 -eq 값2 : 값1 == 값2 (equal)
# 값1 -ne 값2 : 값1 != 값2 (not equal)
if [ $1 -gt $2 ]
then
echo "$1 is greater than $2"
fi
if [ $1 -lt $2 ]
then
echo "$1 is lesser than $2"
fi
if [ $1 -ge $2 ]
then
echo "$1 is greater than or equal $2"
fi
if [ $1 -le $2 ]
then
echo "$1 is lesser than or equal $2"
fi
if [ $1 -eq $2 ]
then
echo "$1 is equal to $2"
fi
if [ $1 -ne $2 ]
then
echo "$1 is not equal to $2"
fi
'임베디드 > 리눅스시스템프로그래밍' 카테고리의 다른 글
쉘 스크립트로 파일 백업하기 (0) | 2019.10.05 |
---|---|
쉘 스크립트 프로그래밍 - 3 (0) | 2019.10.05 |
리눅스 쉘에서의 직전 명령의 반환값 확인 (0) | 2019.10.05 |
쉘 스크립트 프로그래밍 - 1 (0) | 2019.10.04 |
detach를 통한 스레드 반환 (0) | 2019.07.26 |