# 쉘 스크립트 시작 표시
#!/bin/sh
# 입력
read NAME
# 출력
echo "Hello, $NAME!"
printf "Hello %s\n" $NAME
test="SHELL SCRIPT"
echo ${test}
특별한 변수
변수 기능
$0 | 스크립트명 |
$1 ~ $9 | 인수, 첫 번째의 인수는 $1, 2번째 인수는 $2로 액세스 |
$# | 스크립트에 전달된 인수의 수 |
$* | 모든 인수를 모아 하나로 처리 |
$@ | 모든 인수를 각각 처리 |
$? | 직전에 실행한 커맨드의 종료 값(0은 성공, 1은 실패) |
$$ | 이 쉘 스크립트의 프로세스 ID |
$! | 마지막으로 실행한 백그라운드 프로세스 ID |
#!/bin/sh
echo "\$0(스크립트 명): $0"
echo "\$1(1번째 인수): $1"
echo "\$2(2번째 인수): $2"
echo "\$#(인수의 수): $#"
echo "\"\$*\": \"$*\""
echo "\"\$@\": \"$@\""
VAR="exit값은0이 될 것이다."
echo $?
# 결과 값
# $ ./test.sh first second 3rd
# $0(스크립트 명): test.sh
# $1(1번째 인수): first
# $2(2번째 인수): second
# $#(인수의 수): 3
# "$*": "first second third"
# "$@": "first second third"
# 0
변수 값의 치환
문법 설명
${var} | 변수 값을 바꿔 넣는다. |
${var:-word} | 변수가 아직 세팅되지 않거나 공백 문자열의 경우 word를 반환한다. var에는 저장되지 않는다. |
${var:=word} | 변수가 아직 세팅되지 않거나 공백 문자열의 word를 반환한다. var에 저장된다. |
${var:?word} | 변수가 아직 세팅되지 않거나 공백 문자열의 경우 치환에 실패하고, 스탠다드 에러에 에러가 표시된다. |
${var:+word} | 변수가 세팅되지 않은 경우 word가 반환된다. var에는 저장되지 않는다. |
배열
#!/bin/bash
#bash shell로 배열을 작성하는 방법
ARRAY=(item1 item2 item3 item4)
ARRAY[0]="ITEM1"
ARRAY[2]="ITEM3"
#배열 원소 추가
ARRAY+=(item5 aaaa bbbb)
remove=("bbbb")
ARRAY=("${ARRAY[@]/$remove}")
echo "ARRAY[0]: ${ARRAY[0]}"
echo "ARRAY[1]: ${ARRAY[1]}"
#모든 아이템에 액세스
echo "ARRAY[*]: ${ARRAY[*]}"
echo "ARRAY[@]: ${ARRAY[@]}"
# 결과
# ARRAY[0]: ITEM1
# ARRAY[1]: item2
# ARRAY[*]: ITEM1 item2 ITEM3 item4 item5 aaaa
# ARRAY[@]: ITEM1 item2 ITEM3 item4 item5 aaaa
연산
비교 | 의미 | 예 |
-eq | 동일 | [ "$a" -eq "$b" ] 와 $a와 $b가 동일한 경우 TRUE가 반환된다. |
-ne | 다름 | [ "$a" -ne "$b" ] $a와 $b가 동일하지 않은 경우 TRUE가 반환된다. |
-gt | 보다 큼 | [ "$a" -gt "$b" ] $a가 $b보다 큰 경우 TRUE가 반환된다. |
-lt | 보다 작음 | [ "$a" -lt "$b" ] $a가 $b보다 작은 경우 TRUE가 반환된다. |
-ge | 보다 크거나 같거나 | [ "$a" -ge "$b" ] $a가 $b보다 크거나 같은 경우 TRUE가 반환된다. |
-le | 보다 작거나 같거나 | [ "$a" -le "$b" ] $a가 $b보다 작거나 같은 경우 TRUE가 반환된다. |
! | (이)가 아니다 | [ ! "$a" -gt "$b" ]$a가 $b보다 크지 않은 경우 TRUE가 반환된다. |
-o | 어느쪽이든 | [ "$a" -gt "$b" -o "$a" -lt "$b" ]$a가 $b보다 크거나 작은 경우 TRUE가 반환된다. (Bash 확장 / POSIX폐지 예정) |
-a | 양쪽 | [ "$a" -gt 90 -a "$a" -lt 100 ] $a가 90보다 크고 100보다는 작은 경우 TRUE가 반환된다. |
-z | 문자열이 비었는가 | [ -z "$a" ]$a에 어떤 것도 지정되지 않은 경우 TRUE가 반환된다. |
-n | 문자열이 비었는가 | [ -n "$a" ] $a에 어떠한 것이 지정되어 있다면 TRUE가 반환된다. |
if 조건
if [조건] then “내용” elif [조건] fi
#!/bin/sh
one=1
if [ ${one} -gt "$2" ]
then
echo "1번째 인수가 2번째 인수보다 크다"
elif [ ${one} -eq "$2" ]
then
echo "1번째 인수와 2번째 인수가 동일하다"
else
echo "1번째 인수가 2번째 인수보다 작다"
fi
Switch 조건
case 변수 in 조건or값)”내용”;; esac
#!/bin/sh
fruit="orange"
case "$fruit" in
"apple") echo "사과"
;;
"banan") echo "바나나"
;;
"orange") echo "오랜지"
;;
esac
While 반복문
#!/bin/sh
a=0
while [ $a -lt 5 ]
do
echo $a
a=`expr $a + 1`
done
Until 반복문
조건과 일치할 때 까지 반복
#!/bin/sh
a=0
until [ ! $a -lt 5 ]
do
echo $a
a=`expr $a + 1`
done
For 반복문
for 변수 in 여러개의 값 do 내용 done
#!/bin/sh
arrNum=(0 1 2 3 4)
for var in ${arrNum[@]}
do
echo $var
done
함수
#!/bin/sh
#함수를 작성한다
MyFunction () {
echo "함수의 echo이다."
}
MyParamFunc() {
echo "인수1:$1 인수2:$2"
}
#함수를 호출한다
MyFunction
MyParamFunc param1 param2
# 결과
# 함수의 echo이다.
# 인수1:param1 인수2:param2
'Embedded SW 기초' 카테고리의 다른 글
메모리 구조 (0) | 2024.06.10 |
---|---|
임베디드 리눅스 부팅 절차 (0) | 2024.06.10 |
Yocto 기초 (0) | 2024.06.09 |
Bluetooth란 + BLE 동작 방식 (0) | 2024.06.03 |
SQLD 1장 데이터 모델링의 이해 (0) | 2024.06.02 |