Shell, Shell Script

Aliya Shin·2023년 2월 3일
0

코드 위치: camera/BUILD2
결과 rui파일 위치: camera/release/2011

🤔그래서 Shell이 뭐징


커널을 감싸고 있는 껍데기!
사용자가 쓴 알아듣기 쉬운 명령어를 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가지 방법이 존재한다

  1. expr
  • plus=`expr $number1 + $number2` 사용시 역따옴표로 반드시 감싸줘야
  • mul=`expr $number1 \* $number2` 곱하기일땐 \*사용해야함
  1. let

let re=num1+num2

  1. $(( )) 연산자
    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 파일이름 - 파일이 디렉토리인지 여부

코드 보다가 생긴 질문1

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가 남음


파일 처리 추가하기 !

profile
느리지만 꾸준히 성장하는 거북이 같은 개발자

0개의 댓글