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
do
와done
사이에 반복처리될 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
'Linux > shell' 카테고리의 다른 글
[Bash] File과 directory 관련 command (0) | 2024.05.20 |
---|---|
[Shell] command substitution (1) | 2023.10.01 |