linux 에서 엄청 유용하게 쓰이는 shell script 에 대하여 간단하게 정리를 해볼까 한다.
크게 쓰이는 용도는 여러 명령어나 빌드 과정 등을 sh 파일로 만들어 sh 만 빌드하여 복잡한 과정을 매우 간한하게 만들 수있다.
뿐만 아니라 Makefile 을 만들때도 shell script 와 매우 흡사하다. 완전 같지는 않고..
초기 시작
시작은 vi 등의 에디터로 열어주면 된다.
그 다음 #!/bin/bash 로 설정을 해주어야 한다. bash shell 로 선택을 한다는 의미이다.
프로그래밍 언어에서 처럼 매크로를 설정해 줄 수 있는데 shell script 에서는 #define 이 아닌
TARGET=10 처럼 해준다. 단, 공백이 있어선 안된다.
문법
나머지 if else for while case 문을 사용 할 수 있는데 의미는 타언어와 동일하지만 문법면에서 조금 차이가 있다.
if
-b -eq 과 같이 여러 명령옵션을 제공한다. 너무 많아서 자주사용하는것을 제외하곤 외우기가 쉽지않다.
if [ $1 == a ]; then
echo " if success"
else
echo " else success"
fi
if [ $1 -eq $2 ]; then
echo " eq success"
fi
if [ $1 -b ]; then
echo " $1 Block Device"
fi
아래는 if 문 명령어 옵션이다.
for
for 문은 do done 사이의 것들을 반복하여 실행하며 i 변수를 12345 만큼 반복한다.
for i in 1 2 3 4 5 do
echo ${i[*]}
done
while
아래와 같이 while 문도 사용가능하다. 아래는 ls 목록을 출력하며 그 관계처리로 num 을 이용하여 greater equir 을 사용한거다. 숫자 계산을 위해서는 `expr ` 을 사용해 주면된다.
list=$(ls)
index=0
num=${#list[@]}
while [ $num -ge 0 ]; do
echo ${list[$index]}
index=`expr $index + 1`
num=`expr $num - $index`
done
case
제어문으로 아래와 같이 사용한다. switch case 문과 같다고 보면된다.
var=$1
case $var in
bin)
echo " bin "
;;
*)
echo " * "
;;
esac
위와 같은 문법과 리눅스 명령어들을 혼합하여 매우 복잡한 과정을 한파일만 빌드하여 매우 쉽게 만들 수 있다.
물론 함수로 만드는 것도 가능하다. 현업에서도 매우 자주 쓰이며 꼭 알아두어야 한다. 보통 푸싱할때 필수로 쓰인다.
sdcard 에 uboot zImage rootfs 등을 밀어 넣으며 그전에 sdcard 마운트 관련까지 shell file 로 만들어 놓으면 매우 편리하다.
shell script 를 잘 쓰려면 결국 linux 명령어를 매우 잘 알아야 효율적으로 잘 쓸 수 있는것 같다.
mount 를 해제하고 fdisk 로 partition 을 만들고 한다
아래는 partition 을 만드는 과정을 간단하게 해보았다.. 대충 이런느낌 이라고 보면된다.
partition_add()
{
echo n
echo p
echo $1
echo $2
echo $3
}
sdcard_format()
{
(
echo d
echo 5
echo d
echo 4
echo d
echo 3
echo d
echo 2
echo d
partition_add 1 2048 124144
partition_add 2 2048+124144 124124124
partition_add 3 2048+124144+124124124 214912051124
) | fdisk /dev/sdb
}
'OS > Linux' 카테고리의 다른 글
커널을 분석해보자 (0) | 2020.05.19 |
---|---|
uboot 모드 작업하기 (0) | 2020.05.09 |
UBI 혼자 끄적 (1) | 2020.04.29 |
임베디드 리눅스의 구조 (0) | 2020.04.25 |
Oracle, Ubuntu 18.04 Install (0) | 2020.04.11 |