danbibibi
article thumbnail
Published 2023. 12. 13. 10:05
Shell Script 문법 정리 언어/기타

Shell

  • 운영체제 상에서 사용자가 입력하는 명령을 읽고 해석하여 대신 실행해주는 프로그램
  • 운영체제의 커널과 사용자를 이어주는 역할
  • 사용자의 명령어를 해석하고 운영체제가 알아들을 수 있도록 도와주는 명령어 해석기

 

Shell Script

  • Shell에서 사용할 수 있는 명령어들의 조합을 모아서 만든 배치 파일
  • 운영체제의 Shell을 이용하여 한줄씩 순차적으로 읽으면서 명령어들을 실행시켜주는 인터프리터 방식의 프로그램
  • Shell Script를 활용하여 묶어진 명령어 조합을 수행하거나 반복적인 명령어를 단일 명령으로 쉽게 사용할 수 있음

 

기본 문법

  • 파일로 작성 후, 파일을 실행
  • 파일의 가장 위 첫 라인은 #!/bin/bash로 시작
  • 파일 형식(확장자): '파일이름.sh'
  • 쉘 스크립트 파일은 코드를 작성한 후에는 실행 권한 부여 chmod 777 파일이름.sh
  • 주석: #내용
  • 실행: ./파일이름.sh

 

변수

  • 변수명=값 사이에 띄어쓰기는 허용되지 않음
  • $변수명으로 참조
num=100
str="hello"
 
echo "$num" # echo "${num}"
echo "$str" # echo "${str}"

 

배열

  • ${변수명[인덱스번호]}로 참조
alpha=("a" "b" "c") # 변수 선언
echo ${alpha[1]} # $alpha 배열의 두 번째 인덱스에 해당하는 b 출력
echo ${alpha[@]} # $alpha 배열의 모든 데이터 출력
echo ${alpha[*]} # $alpha 배열의 모든 데이터 출력
echo ${#alpha[@]} # $alpha 배열의 배열 크기 출력

filelist=( $(ls) ) # 해당 쉘 스크립트 실행 디렉토리의 파일 리스트를 배열로 변수 선언
echo ${filelist[*]} # $filelist 모든 데이터 출력

 

연산자

  • expr: 숫자 계산
  • expr을 사용하는 경우 `(틸트)를 사용해야 함
  • 연산자와 괄호 앞에는 \ (역슬래시)를 같이 사용해야 함
  • 연산자와 숫자, 변수, 기호 사이에 space를 넣어야 함
num=`expr \( 3 \* 5 \) / 4 + 7`

 

숫자인 경우

a -eq  ==, equal
a -ne b  !=, not equal
a -lt b  <, less than
a -le b  <= less of equal
a -gt b  > greater than
a -ge b  >= greater or equal

 

문자(열)인 경우

== 같으면 true
!= 다르면 true
-z length가 0이면 true  = null인 경우 true
-n length가 0이 아니면 true

 

조건문

if [ 조건 ]; then 명령문; fi

if [ 조건 ] 
then
     명령문      # 참일 때
else  
     명령문      # 거짓일 때
fi
num=5
 
#if[조건]; then ... elif[조건]; then ... else ... fi 문
if [ "${num}" -eq 2 ]; then
    echo "num is 2"
elif [ "${test_num}" -eq 3 ]; then
    echo "num is 3"
else
    echo "num is not 2 or 3"
fi
 
#if((산술연산)); then ... elif((산술연산)); then else ... fi문
if (( ${num} > 3 )); then
    echo "number is greater than 3"
else
    echo "number is not greater than 3"
fi

 

반복문

while [ 조건 ]  
do 
     명령문 
done
#while문
num=0
 
while (( "${num}" < 5 )); do
    echo "${num}"
    (( num = "${num}" + 1 )) 
done
 
#for문
arr=(1 2 3 4 5 6 7)
 
for i in ${arr[@]}; do
    echo "$i"
done
 
for (( i = 0; i < 10; i++)); do
    echo "$i"
done

 

함수

  • function은 생략 가능
  • 함수명만으로 호출 가능 (소괄호 필요x)
  • 함수 선언보다 호출을 먼저하면 안됨
  • 변수명 앞 local: 해당 함수 내에서만 사용 가능한 지역 변수를 선언할 때
# 함수 선언
function 함수명()
{
    함수 내용
}

# 함수 사용
함수명

 

  • 함수 인자: $1, $2, $3... 순서대로 번호가 부여되며 ${10} 부터는 {} 중괄호로 감싸주어야 함
# 함수 선언
function 함수명()
{
    # 함수 내용
    # $1 : 인자1, $2 : 인자2 ...
}

# 함수 사용
함수명 인자1 인자2 ...

 

파일 검사

 -e 파일명  파일이 존재하는 경우 true
 -d 파일명  파일이 디렉토리인 경우 true
 -h 파일명  파일이 심볼릭 링크 파일인 경우 true
 -f 파일명  파일이 일반 파일인 경우 true
 -r 파일명  파일이 읽기가 가능한 경우 true
 -s 파일명  파일의 크기가 0이 아닌 경우 true
 -u 파일명  파일의 set-user-id가 설정된 경우 true
 -w 파일명  파일이 쓰기가 가능한 경우 true
 -x 파일명  파일이 실행 가능한 경우 true

 

'언어 > 기타' 카테고리의 다른 글

C, C++, JAVA, Python  (0) 2023.05.08
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로