치춘짱베리굿나이스
쉘 스크립트 문법 본문
Shell Script 작성 문법
Github에 저장한 글 의 백업본
문장을 이어 쓸 땐 ;로 구분
일반 변수
일반 변수 선언
- 변수명 = 데이터
test1 = 'hello world!'
- 중요!!! 변수명, =, 데이터 사이에 띄어쓰기 붙이지 않으면 에러 남
- String은 " (큰따옴표) 로 감싸주기
일반 변수 사용
- $변수명
echo $test1
hello world
리스트 변수
리스트 변수 선언
- 변수명=(데이터1 데이터2 데이터3 ...)
chicken = ('fried' 'yangnyeom' 'ganjang')
- 변수명=($(명령어명)) 은 해당 명령어 사용 결과를 배열로 저장
test1 = ($(ls))
리스트 변수 사용
- ${변수명[인덱스]}
echo ${chicken[1]}
yangnyeom
- ${변수명[@]}, ${변수명[*]} 은 배열 내 모든 데이터 출력
echo ${chicken[@]}
fried yangnyeom ganjang
- ${#변수명[@]} 은 배열 크기 출력
echo ${#chicken[@]}
3
사전 선언된 지역변수
$$: 쉘 프로세스 번호
echo $$
2336
$0: 쉘 스크립트의 이름
echo $0
./test.sh
$1 ~ $9 : 명령줄 인수
$* : 모든 명령줄 인수 리스트
연산자
- expr : 숫자 계산
- 문장을 `로 감싸줘야 함
- '이랑 다름!
- 연산자 *와 괄호 () 앞에는 \를 붙여줘야 함
- 연산자, 숫자, 변수, 기호 사이에는 공백 ( ) 넣기
n1=`expr \( 5 + 6 \) \* 8`
echo $n188
- 문장을 `로 감싸줘야 함
if else 구문
- if [ 조건 ]; then 내용 이 짝꿍
- else if은 elif [ 조건 ]; then 내용 으로 사용
- else 는 then 필요 없음
- if문을 닫을 때는 fi
- 조건문은 [ 조건문 ] 으로 사용
- 꺾인괄호 옆에 공백이 들어가는 것을 기억하자
- 예시
if [ 조건 ]
then
실행시킬 명령문 1
elif [ 조건 ]
then
실행시킬 명령문 2
else
실행시킬 명령문 3
fi - 또는
if [ 조건 ]; then
실행시킬 명령문 1
elif [ 조건 ]; then
실행시킬 명령문 2
else
실행시킬 명령문 3
fi
조건문
문자열
- == : 양 옆의 문자열이 일치
test1 == test2
test1과 test2가 같을 때 참
- != : 양 옆의 문자열이 일치하지 않음
test1 != test2
test1과 test2가 다를 때 참
- -z 변수명 : 문자열이 null이면 참
-z test1
test1이 null (빈값) 이면 참
- -n 변수명 : 문자열이 null이 아니면 참
-n test1
test1이 null이 아닐 때 참
수치
- -eq : 양 옆의 수가 같음 (equal)
test1 -eq test2
test1 = test2일때 참
- -ne : 양 옆의 수가 같지 않음 (not equal)
test1 -ne test2
test1 != test2일때 참
- -lt : 왼쪽이 오른쪽보다 작음 (less than)
test1 -lt test2
test1 < test2일 때 참
- -le : 왼쪽이 오른쪽보다 작거나 같음 (less or equal)
test1 -le test2
test1 <= test2일 때 참
- -gt : 왼쪽이 오른쪽보다 큼 (greater than)
test1 -gt test2
test1 > test2일 때 참
- -ge : 왼쪽이 오른쪽보다 크거나 같음 (greater or equal)
test1 -ge test2
test1 >= test2일 때 참
논리 연산자
- -a, && : and
조건1 -a 조건2
조건1 && 조건2조건1과 조건2가 둘다 참일 때 참
-a는 조건을 그대로 쓸 때, &&는 [ ] 안에 넣어줬을 때 사용 - -o, || : or
조건1 -o 조건2
조건1 || 조건2조건1과 조건2 둘 중 하나라도 참일 때 참
-o는 조건을 그대로 쓸 때, ||는 [ ] 안에 넣어줬을 때 사용 - ! : not
!조건1
조건1이 성립하지 않을 때 참
- true : 항상 참
- false : 항상 거짓
파일 검사
-e : 파일이 존재
-e test.sh
test.sh가 존재하면 참
-d : 디렉토리일 때
-d folder1
folder1이 디렉토리일 때 참
-f : 파일이 일반 파일
-f test.sh
파일이 일반 파일이면 (파이프라인, 심볼릭, 폴더 등 제외) 참
-r : 파일이 읽기 가능
-r test.sh
파일이 읽기 가능할 때 (r 권한 있을 때) 참
-w : 파일이 쓰기 가능
-w test.sh
파일이 쓰기 가능할 때 (w 권한 있을 때) 참
-x : 파일이 실행 가능
-x test.sh
파일이 실행 가능할 때 (x 권한 있을 때) 참
-s : 파일의 크기가 0이 아님
-s test.sh
파일 크기가 0이 아닐 때 (빈 파일이 아닐 때) 참
-h : 파일이 심볼릭 파일
-u : 파일이 set-user-id 설정됨
for while 구문
for
for i in 리스트; do 내용 이 짝꿍
for문을 닫을 때는 done
예시
for i in list1
do
실행시킬 명령문
done또는
for i in list1; do 실행시킬 명령문; done
리스트에 숫자 배열 (range) 을 쓰고 싶다면
예시: 1부터 10까지
일렬로 적기
for i in 1 2 3 4 5 6 7 8 9 10
시퀀스로 적기 (python의 range와 비슷)
for i in `seq 1 10`
C언어 구문처럼 적기
for ((i=1; i<=10; i++))
while
- while [ 조건 ]; do 내용 이 짝꿍
- while문을 닫을 때는 done
- 예시
while [ 조건문 ]
do
실행시킬 명령문
done - 또는
while [ 조건 ]; do 실행시킬 명령문; done
- 예시: 1부터 10까지
i=1
while [ $i -le 10 ]
do
실행시킬 명령문
i=`expr $i + 1`-le (less then) 과 $i 변수, 수식을 활용함
주석
- #로 시작하는 라인
#이것은 주석입니다..
'UNIX 환경 > Shell' 카테고리의 다른 글
crontab 사용하기 (0) | 2022.07.20 |
---|---|
쉘 & 쉘스크립트 정리 (0) | 2021.03.21 |