books/Linux

[모두의 리눅스] 셸 스크립트 (1)

836586697769 2024. 8. 8. 18:13

셸 스크립트 작성 방법

  1. 신규 파일 생성
$ vim homesize.sh
  1. 파일 내용 작성
#!/bin/bash
du -h ~ | tail -n 1
  • #!로 시작하는 행: 셔뱅
    • 주석으로 간주
    • 이 셸 스크립트는 /bin/bash를 사용한다고 명시적으로 선언
  1. 실행 권한 부여 및 실행
# 실행 권한 부여
$ chmod +x homesize.sh

# 현재 디렉터리에 있는 homesize.sh를 실행
$ ./homesize.sh 

 

source 명령어

셔뱅 없는 파일 ./homesize-hochebang.sh를 실행 권한 부여 없이 source ./homesize-noshebang.sh. ./homesize-noshebang.sh로 실행 가능

  • 현재 셸에서 실행되기 때문에 주의
  • source 명령어 대신 파일 이름으로 실행하는 것이 좋음
    • 셔뱅에 지정한 셸에서 실행되기 때문에 현재 사용자가 사용하는 셸에 영향 받지 않음
    • source 명령어는 현재 셸의 환경에 따라 실행되지 않거나 현재 셸의 변숫값이나 별명을 바꿀 수도 있음
  • 여러 개의 셸 스크립트가 같은 값을 참조하거나 공통된 설정을 하나에 입력할 땐 유용함

 

여러 명령어를 한 행으로 입력

  • ;로 연결하기
#!/bin/bash
echo "root directory"; cd /; ls -l

 

한 커맨드 라인 여러 행에 표기

  • 행 끝에 \ 입력
#!/bin/bash
echo \
	"root directory"
  • 뒤에 Enter 누르기
sort file3 |
uniq -c |
sort -n

 

변수

appdir=/home/ldk/myapp # 공백X
echo $appdir # 참조하기
  • 변수명에 사용할 수 있는 문자: 알파벳, 숫자, 언더스코어
    • 숫자는 첫 글자로 사용 불가

 

쿼팅

  • 작은따옴표나 큰따옴표로 감싸면 공백이 있어도 한 단어로 인식
  • 큰따옴표 안에서는 $로 시작하는 변수가 값으로 치환됨
#!/bin/bash
country=Korea
echo 'I came from $country'
echo "I came from $country" # I came from Korea
echo "I came from \$country" # 와 같이 앞에 \\를 붙이면 문자 그대로 출력 가능

 

명령어 치환

$ filename=$(date '+%Y-%m-%d')
touch "$filename"

$ echo "Today is `date '+%Y-%m-%d'`."
Today is 2021-05-23.

 

위치 파라미터

#!/bin/bash
# parameters.sh
echo "\$0 = $0" # 특수 파라미터
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$3 = $3"
echo "\$4 = $4"
echo "\$# = $#"
echo "\$@ = $@"
echo "\$* = $*"
$ ./parameters.sh aaa bbb ccc
$0 = ./parameters.sh # 셸 스크립트 파일 이름
$1 = aaa # 커맨드 라인 인자 값
$2 = bbb
$3 = ccc
$4 = 
$# = 3 # 인자 3개
$@ = aaa bbb ccc # 각 위치 파라미터가 문자열로 전개
$* = aaa bbb ccc # 한 문자열로 전개