티스토리 뷰

반응형

변수

1. 단순 변수

$ 이름=단어 

$ country=korea city=seoul 
$ address="서울시 용산구 청파동" 

$ echo $city 
seoul

2. 리스트 변수

$ 이름=(단어리스트) 
$ cities=(서울 부산 목포) 

# 새로운 값 추가 - 두 가지 방법 
$ cities = (${cities[*]} 제주) 
$ cities[3] = 제주
  • ${name[i]} : 리스트 변수 name의 ​i 번째 원소
  • ${name[*]} / ${name[@]} : 리스트 변수 name의 모든 원소
  • ${#name[*]} / ${#name[@]} : 리스트 변수 name의 원소 개수

표준입력 읽기 - read

read 명령어

표준 입력에서 한 줄을 읽어 단어들을 변수에 순서대로 저장한다.

(남은 단어들은 마지막 변수에 모두 저장한다.)

 

$ read x y 
Merry Christmas!     # 입력 

$ echo x 
Merry 

$ read x 
Merry Christmas!     # 입력 

$ echo x 
Merry Christmas!
 

 

쉘 변수

환경변수

값이 자식 프로세스에게 상속된다.

(자식 프로세스가 환경변수 값을 부모로부터 복사한다.)

$ country=대한민국 city=서울 
$ export country         # export : 환경변수 설정 명령어

 

 

사전에 정의된 환경 변수

  • $USER : 사용자 이름
  • $TERM : 터미널 타입
  • $PATH : 명령어를 검색할 디렉터리들 리스트
  • $HOME : 홈 디렉터리
  • $SHELL : 로그인 쉘 경로명
  • $MAIL : 메일 박스 경로명
  • $HOSTNAME : 호스트 이름

 

사전에 정의된 지역 변수

  • $$ : 쉘의 프로세스 번호
  • $0 : 쉘 스크립트 이름
  • $1 ~ $9 : 명령줄 인수
  • $* : 모든 명령줄 인수 리스트
  • $# : 명령줄 인수의 개수


 

if 문

if 조건식 
then 
	명령어리스트 
else 
	명령어리스트 
fi

조건식 쓰는 방법

1. test 식

$ if `test $# -eq 1`

2. [ 식 ]

$ if [$# -ne 1 ]

수식

조건식에서 아래의 연산자들을 활용할 수 있다.

산술 비교 연산자

-eq / -ne
같으면/다르면 참, 아니면 거짓.
-gt / -lt
크면/작으면 참, 아니면 거짓.
-ge / -le
크거나 같으면/작거나 같으면 참, 아니면 거짓.

문자열 비교 연산자

== / !=
같으면/다르면 참.
-n 문자열
null 이 아니면 참.
-z 문자열
null 이면 참.

파일 관련 연산

-a 파일 / -e 파일
해당 파일이 존재하면 참
-r 파일
사용자가 해당 파일을 읽을 수 있으면 참
-w 파일
사용자가 쓸 수 있으면 참
-x 파일
사용자가 실행할 수 있으면 참
-O 파일
사용자가 파일의 소유자이면 참
-z 파일
파일 크기가 0이면 참
-f 파일
일반 파일이면 참
-d 파일
디렉터리이면 참

부울 연산자

!
부정
&&
논리곱
||
논리합

산술 연산자

$ a=2+3 
$ a=`expr 2 + 3`

위의 두 구문에서 a 변수에는 5가 저장되지 않고 '2+3'이라는 문자열이 저장된다.

let 명령어를 이용해 변수에서 산술 처리가 가능하다.

$ let 변수=수식
$ let a=2*3 
$ let a=$a+2 
$ let a*=10 
$ let b++

산술 수식은 if [ ] 가 아닌 if ((수식)) 을 사용한다.

변수 타입 선언 - declare

옵 션

-r 변수
읽기 전용 변수로 선언
-i 변수
정수형 변수로 선언
-a 변수
배열 변수로 선언
-f
스크립트에 정의된 모든 함수 출력
-f 함수이름
해당 함수 이름 출력
-x 변수
환경변수로 export

let 명령어를 사용할 필요가 사라진다.


조건문

1. if

if 조건식 
then 
	명령어리스트 
elif 조건식 
then 
	명령어리스트 
else 
	명령어리스트 
fi

 

2. switch

case 단어 in 
	패턴1) 명령어리스트;; 
    패턴2) 명령어리스트;; 
    ... 
    *) 명령어리스트;; 
esac


반복문

1. for 구문

for 이름 in 단어리스트 
do 
	명령어리스트 
done 

# 모든 명령줄을 인수로 처리하기 
for file in $* 
do 
	... 
done

2. while 문

while 조건식 
do 
	명령어리스트 
done

디렉터리 내 모든 파일을 처리하고 싶을 때

cd $dir        # 해당 디렉터리로 이동 

for file in * 
do 
	... 
done

터미널에서도 while 문과 for 문을 실행할 수 있다.

$ for f in * 
> do 
> echo $f 
> done
 

 


 

함수

# 함수 정의 
함수이름() 
{ 
	명령어리스트 
} 

# 함수 호출 
함수이름[매개변수]

 

→ 재귀 호출도 가능하다.


 

 

디버깅

스크립트에서 오류를 찾아내고 싶을 때 디버깅을 진행한다.

$ bash -vx 스크립트 [명령줄 인수] 
$ bash -v menu.bash

 

 

 

 

shift

shift 명령어

명령줄 인수 [리스트 변수] 내 원소들을 하나씩 왼쪽으로 이동시킨다.

$ shift [리스트변수]

반응형