본문 바로가기
👨‍💻Computer Science/리눅스시스템프로그래밍

[Linux] 쉘 스크립트(Shell Script)

by 코푸는 개발자 2022. 5. 3.
728x90

1. 환경

  • Linux 기반 시스템
  • Bash shell(/bin/bash)

 

2. 쉘 스크립트 작성 및 권한 부여

2.1. 파일생성 및 권한 부여

  • 파일생성
$ touch shell_script_practice.sh // 파일 생성
$ vim shell_script_practice.sh // 쉘 스크립트 파일 편집기로 열기
  • 실행 권한 부여(파일의 상태 변경)
$ chmod +x shell_script_practice.sh // 실행 권한 부여


2.2. 스크립트 상단에 #!/bin/bash 추가

 

#!/bin/bash
 
... 하단에 스크립트 작성 ...


2.3. 쉘 스크립트 실행 방법

  • ./[쉘스크립트 파일명]
$ ./shell_script_practice.sh


3. 기본 문법과 예제

3.1. 기본 출력

  • echo, printf
echo "Echo Test" # 자동 개행
printf "printf Test" # 자동 개행X
printf "%s %s" print test # 뒤에 오는 문자열들이 전달되는 인자라고 생각하면 됩니다.
  • $#: 스크립트에 전달되는 인자들의 수(C언어에서 argc)
  • $0: 실행하는 스크립트의 파일명으로 실행했을 때 경로를 포함한다면 경로를 포함해서 나옵니다.
  • $1, $2 …: 스크립트로 전달된 인자들(C언어에서 argv[0], argv[1]…)

 

#!/bin/bash
 
echo "Echo Test"
printf "printf Test\n"
printf "Name of script: %s\n" $0
printf "%d arguments %s %s\n" $# $1 $2


3.2. 주석

  • #를 사용
# echo "Echo Test"


3.3. 변수 선언

=를 이용해서 선언하고 $를 이용해서 사용

=는 공백 없이 붙여써야한다.

지역변수에는 local을 붙인다.

{}는 parameter expansion으로 $와 함께 감싼 부분에 변수를 대입해준다.

여러 표현 방법을 통해 다양하게 사용이 가능하다.

변수가 선언되지 않았을때 default_value=${default_value:="example default value"}처럼 기본값을 사용하도록 설정 가능하다.

""로 감싸서 사용하면 더 안전하다. 문자열에 공백도 포함해서 값을 이용할 수 있기 때문이다. Ex) $ex -> "${ex}"

#!/bin/bash
 
# shell script variable
test="abc"
num=100
 
# variable usage
echo ${test}
echo ${num}
echo "${test}"
echo "${num}"
 
# local variable
local local_val="local one"
 
# If variable default_value is not set, set it to "example default value" and assign again.
default_value=${default_value:="example default value"}

 

4. 일반적으로 많이 사용하는 예시

#!/bin/sh
 
# Setup JDK version Scripts
jdk6dir='/home/jaekyung/jdk1.6.0_45'
jdk7dir='/home/jaekyung/jdk1.7.0_80'
jdk8dir='/home/jaekyung/jdk1.8.0_311'
# antdir='/usr/local/ant-1.9.16'
 
#alias j6='JAVA_HOME=${jdk6dir}; export JAVA_HOME; export PATH=$JAVA_HOME/bin:$PATH; export CLASSPATH=$JAVA_HOME/lib:CLASSPATH;'
#alias j6='JAVA_HOME=${jdk6dir}; export JAVA_HOME; PATH=$PATH:$JAVA_HOME/bin; CLASSPATH=$CLASSPATH:$JAVA_HOME/lib;'
#alias j7='JAVA_HOME=${jdk7dir}; export JAVA_HOME; PATH=$PATH:$JAVA_HOME/bin; CLASSPATH=$CLASSPATH:$JAVA_HOME/lib;'
#alias j8='JAVA_HOME=${jdk8dir}; export JAVA_HOME; PATH=$PATH:$JAVA_HOME/bin; CLASSPATH=$CLASSPATH:$JAVA_HOME/lib;'
#alias j7='JAVA_HOME=${jdk7dir}; export JAVA_HOME; export PATH=$JAVA_HOME/bin:$PATH; export CLASSPATH=$JAVA_HOME/lib:CLASSPATH;'
#alias j8='JAVA_HOME=${jdk8dir}; export JAVA_HOME; export PATH=$JAVA_HOME/bin:$PATH; export CLASSPATH=$JAVA_HOME/lib:CLASSPATH;'
 
alias j6='JAVA_HOME=${jdk6dir}; export JAVA_HOME; export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib; export ANT_HOME=/home/jaekyung/ant-1.9.16; export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH'
alias j7='JAVA_HOME=${jdk7dir}; export JAVA_HOME; export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib; export ANT_HOME=/home/jaekyung/ant-1.9.16; export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH'
alias j8='JAVA_HOME=${jdk8dir}; export JAVA_HOME; export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib; export ANT_HOME=/home/jaekyung/ant-1.9.16; export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH'
 
#antdir='/usr/local/ant-1.9.16'
#export ANT_HOME=${antdir}
#export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
 
#alias j7='JAVA_HOME=${jdk7dir}; export JAVA_HOME; CLASSPATH=$CLASSPATH:$JAVA_HOME/lib; export ANT_HOME=${antdir}; export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH'
#alias j8='JAVA_HOME=${jdk8dir}; export JAVA_HOME; CLASSPATH=$CLASSPATH:$JAVA_HOME/lib; export ANT_HOME=${antdir}; export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH'
# Init JEUS_HOME Directory
alias cdworkdir='cd /media/jaekyung/harddisk/workspace/'
  • 파일명 .bashjk (일반적으로 숨김 파일 형식으로 생성)

 

728x90

댓글