코드 위치: camera/BUILD2
결과 rui파일 위치: camera/release/2011
커널을 감싸고 있는 껍데기!
사용자가 쓴 알아듣기 쉬운 명령어를 Shell은 받아서 해석 후, 커널에 보내고, 커널은 HW를 제어 후, 명렁어를 수행해서 다시 커널 -> shell -> 사용자 전달전달 한다
bash
shell프로그램 중 하나
터미널에서 echo $0
하면 출력됨
Shell script
일련의 작업들을 굉장히 자주 하는데, 이걸 한번에 딱 버튼(?)을 누르면 따라락~ 해낼 수 있는 버튼을 만드는 것
자 그러면 그 버튼들을 만들 명령어들을 살펴보자 !
파트 1. 변수
✏️값을 사용할 때는 변수명 앞에 특수문자 "$ { ~~ }"를 사용한다. (Ex. echo ${data}
) *주의: $(~~)과 혼동 주의
✏️변수를 생성할 때는 "=" 대입문자 앞뒤로 공백이 없어야 한다. (Ex. data="abcd"
)
✏️변수 명 앞에 export
을 붙여주면 환경 변수(environment variable)로 설정되어 자식 스크립트에서 사용 가능
파트 2. 매개변수
✒️ ${0} : 실행된 셸 스크립트 이름
✒️ ${1} : 스크립트에 넘겨진 1번째 아규먼트
✒️ ${#} : 아규먼트 갯수
✒️ ${*} : 전달된 인자 전체 (IFS 환경변수 사용)
✒️ ${@} : 전달된 인자 전체 (IFS 환경변수 사용안함)
파트 3. 산술 연산
산술 연산에는 3가지 방법이 존재한다
plus=`expr $number1 + $number2`
사용시 역따옴표로 반드시 감싸줘야함mul=`expr $number1 \* $number2`
곱하기일땐 \*사용해야함let re=num1+num2
plus=$((num1+num2))
💻파트 4. if문
if [ 값1 조건식 값2 ]
then
수행1
else
수행2
fi
if [ 값1 조건식 값2 ]; then
수행1
else
수행2
fi
💻파트 5. case문
case 문자열 in
경우1)
명령 명령 명령
;;
경우2)
명령 명령 명령
;;
* )
명령 명령 명령
;;
esac
💻파트 6. for in문
# 배열을 사용한 반복문
arr=(1 2 3 4 5)
for i in "${arr[@]}" # arr[@] : 배열 전체 출력
do
echo "${i}"
done
💻파트 7. test
-e 파일이름 - 파일이 존재하는지 여부
-f 파일이름 - 일반파일인지 여부 ----> $ test -f /dev/console
-b 파일이름 - 파일이 블록파일로 존재하는지 여부
-c 파일이름 - 파일이 캐릭터파일로 존재하는지 여부
-d 파일이름 - 파일이 디렉토리인지 여부
💻파트 8. svn
svn 사용흐름 : checkout(최초로 받아옴) -> 소스 수정 -> add() -> update -> commit
-e 파일이름 - 파일이 존재하는지 여부
-f 파일이름 - 일반파일인지 여부 ----> $ test -f /dev/console
-b 파일이름 - 파일이 블록파일로 존재하는지 여부
-c 파일이름 - 파일이 캐릭터파일로 존재하는지 여부
-d 파일이름 - 파일이 디렉토리인지 여부
SOPTS=$(echo $OPTS | sed "s/skipIdis//" | sed "s/skipidis//")
해석
echo $OPTS 결과를 sed "s/skipIdis//의 input으로 넘겨서 건너건너 수행,
최종적으로 SOPTS는 OPTS에서 skipidis와 skipIdis가 사라진게 남음
📍 OPTS가 모든 파라미터를 저장하고 있는 $@고, 파라미터가 build skipidis test
였다고 하면, 최종 SOPTS에는 build test
가 남음
파일 처리 추가하기 !