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
'👨💻Computer Science > 리눅스시스템프로그래밍' 카테고리의 다른 글
[Linux] 환경변수 (0) | 2022.03.29 |
---|---|
[Linux] 리눅스 파일 구조 (0) | 2022.03.28 |
[Linux] 리눅스 단축키 및 명령어 정리 (0) | 2022.03.28 |
[Linux] vim/vi 명령어 (0) | 2022.03.25 |
[Linux] 리눅스 (0) | 2022.03.24 |
댓글