bash란 것이 결국에는 bash script를 작성하는 것이고 스크립트를 작성한다는 것은 어떤 작업을 자주 반복해야 한다는 뜻인데 처음에는 별로 bash에 대해 알아볼 생각이 없었다. 급하면 그냥 파일 하나에 명령어 쭉 나열하고 실행권한 줘서 실행하는 것으로 문제가 없는데다가, 파이썬이 안깔린 리눅스가 요즘 없기 때문이다. 그냥 파이썬으로 슬슬 하면 똑같이 쓸 수 있는데 굳이 bash를… 하는 생각이었는데, 문제가 뭐냐 하면 파이썬이나 루비 같은 스크립트 언어들이 안깔린 리눅스도 종종 있는 편이고 또 그 버전 또한 다르다는 것이다. 예를 들면 우분투는 진작에 파이썬이 2.7.3+ 이지만 CentOS는 가장 최신 6.4도 2.6대에 아직 머물러 있으니…

뭐 어쨌든 버전이 틀린 것이지 딱히 문제될 것은 없는 것이고 또 파이썬이나 루비 같은게 없는 리눅스 또한 거의 찾기 힘드므로((루비는 없는 것도 있지 않나?)) 별 배우기에는 필요는 없다고 생각하지만 기본적인 문법이나 명령어, 유용한 팁 같은 것들 정도는 정리해 두는 것이 좋을거 같다. 사실 이정도만 익혀도 별 문제 없을듯…

간단한 문법

변수

정의

  • VARNAME=“VALUE”
    • = 은 VARNAME과 “VALUE"가 간격이 없어야 함
$ var="VALUE"

출력

  • echo $VARNAME
    • 변수의 값을 출력
$ echo $var
VALUE
  • $VARNAME
    • 변수의 값을 실행
$ var="hostname"
$ $var
cublr-VirtualBox
  • ${!VARNAME}
    • 변수의 값이 가리키는 이름의 변수를 출력
$ var3="var2"
$ var2="var1"
$ echo $var3
var2
$ echo ${!var3}
var1
$ echo ${var3}
var2

조작

  • $VARNAME1$VARNAME2
    • 값 붙이기(문자열 합치기)
$ hostname
cublr-VirtualBox
$ var1="host"
$ var2="name"
$ $var1$var2
cublr-VirtualBox
  • ${VARNAME,,}
    • UPPER to lower
  • ${VARNAME^^}
    • lower to UPPER
$ var1="AaBbCc"
$ echo ${var1}
AaBbCc
$ echo ${var1,,}
aabbcc
$ echo ${var1^^}
AABBCC
  • op1 && op2
    • op1이 성공해야 op2가 실행
  • op1 || op2
    • op1이 실패해야 op2가 실행((쉘 명령어는 성공시 0을 리턴하는 것으로 성공 여부를 알 수 있다.))
$ service nginx start
Starting nginx: nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)
$ echo $?
1
$ service nginx stop
Stopping nginx: nginx.
$ echo $?
0
$ service nginx stop && hostname
Stopping nginx: nginx.
cublr-VirtualBox
$ service nginx start || hostname
Starting nginx: nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)
cublr-VirtualBox
$ service nginx stop || hostname
Stopping nginx: nginx.
  • $(commands)
    • commands의 결과를 리턴
$ ls
directory_name
$ $(ls)
directory_name: command not found
$ hostname
cublr
$ $(hostname)
cublr: command not found

함수

정의

  • function function_name{}
    • function parameter는 없음, 그러나 호출된 시점에서의 어떤 변수에든 접근할 수 있다.

호출

  • function_name
$ cat sh_test.sh 
var1=1

function function_name(){
    echo $var1
}

function_name
var1=2
function_name
var1=3
function_name
$ ./sh_test.sh 
1
2
3