본문 바로가기
개발환경

[bash] shell 기본 : 변수 설정 및 반복구문

by ds31x 2023. 7. 19.

shell script란 shell에서 동작하는 script로,

여러 command 들을 하나의 파일로 저장하고 해당 파일을 line별로 interpreting하여 수행시킬 수 있게 해주는 것을 가르킴.

(py파일이 python interptreter에 의해 동작하는 것처럼. sh파일은 shell에 의해 statement별로 execute됨.)

  • bash는 브라이언 폭스가 1987년 만든 shell로 1977년 만들어진 Unix의 Bourne shell과 호환성이 매우 높아서 가장 널리 사용되는 shell임.
  • 이를 좀 더 개선한 zsh과 함께 가장 많이 사용되고 있음.

Shebang Line

shell script 파일은 반드시 #!/usr/bin/env bash와 같은 라인으로 시작해야한다.

해당 line을 Shebang line (sharp# + bang!=shebang)이라고 부름.

이는 unix계열의 command line interface에서 실행되는 script들의 약속으로 #!가 2byte의 magic number로서 실행해야하는 프로그램의 경로를 지정해줌.


변수설정

bash에서 변수설정은 다음과 같음.

변수명="값"
  • 주의할 건 = 앞뒤로 공백문자는 있어선 안된다.
  • bash에서 모든 value는 string으로 처리된다. "로 둘러싸지 않아도 되지만 공백문자가 값에 포함될 경우등을 위해 가급적 싸주는게 좋음.

이렇게 정의된 변수는 다음과 같이 사용됨.

${변수명}
  • ${변수명}은 값으로 치환됨.
  • $변수명으로 해줘도 동작하지만 가독성을 위해 curly bracket을 사용하는 게 좋음.
  • 변수명에 해당하는 값은 항상 string으로 처리된다.
  • 해당 값에 공백문자가 있는 경우에는 "${변수명}" 과 같이 double quotes로 싸주어야 한다.

다음의 예를 수행해 보자.

ds_v="test"

echo ${ds_v}

위를 내용으로 가지는 test.sh를 만들고, chmod +x test.sh를 통해 실행가능한 파일로 권한변경을 해준 후 ./test.sh을 입력하면 수행됨.

chmod +x test.sh
./test.sh

반복문

C 스타일의 for문은 다음과 같음.

root_dir=/home/dsaint31/test
for ((i=1; i<=4; i++))
do
    cp ${root_dir}/test.py ${root_dir}/dtest${i}.py
done
  • dodone 사이에 반복처리될 statement들을 위치시킴.
  • loop variable을 사용하려면 ${i}를 이용함.
  • 주의할 건 for문에서 (( ~ ))로 parentheses가 2개가 사용된다는 점임.

Python 스타일의 for문도 가능함.

arr=(1 2 3 4 5)
for x in "${arr[@]}"
do
    echo ${x}
done
  • ${arr}만 기재하면 안됨.
  • ${arr[@]}이어야만 전체 array의 요소를 다 돌게됨.

다음과 같은 처리도 가능함.

arr="1 2 3 4 5"
for x in ${arr}
do
    echo ${x}
done

 


숫자가 많아야 한 경우는 seq를 이용한다.

for x in `seq 3 9`
do
    echo ${x}
done
  • `는 back-tip임.~키와 같이 존재함(tab위).
  • 이는 command substitution을 이용한 방법임.

2023.10.01 - [Linux] - [Shell] command substitution

 

[Shell] command substitution

우리나라말로 명령어 치환 이라고 불리며, 특정 명령어의 수행결과를 문자열로 입력받는 형태로 셀프로그래밍 등에서 사용됨. command substition 사용법 아래 예제는 result.txt 를 현재 날짜 정보를

ds31x.tistory.com

 

반응형