리눅스 명령어들을 한 파일에 모아놓고 인터프리터가 한줄씩 해석하는 파일이다. 스크립트파일을 만들고 실행권한을 할당해야 실행이 가능하다. 스크립트는 위에서부터 하향식으로 실행된다.
#!/bin/bash
#a.sh
time=`date + %Y%m%d`
echo $time
다음 위 코드는 date
명령어를 사용하여 연월일 형식으로 time
이라는 변수에 저장후 time
변수를 출력하는 스크립트이다. 위와같이 명령어들을 집합처럼 한파일에 모아두고 실행이 가능하다.
쉘 스크립트 맨 첫줄에 #!/bin/bash
라는 구분이 있는데 이부분은 서브 쉘스크립트를 실행할 쉘을 지정해 줄 수 있다. 즉, 서브쉘은 쉽게 말해 쉘 안에 또다른 쉘을 실행할 수 있다. 다음 그림과 같이
/bin
디렉토리에 여러 쉘들이 존재하는데 쉘안에서 또다른 쉘을 실행할 수 있다. 그리고 exit
로 나와서 그 전 쉘로 돌아가는것이 가능하다.
쉘 스크립트도 타언어(C, Java)와 같이 자료구조중 배열이라는 자료구조가 존재하는데 사용법을 알아보겠다.
배열을 선언하는 방법은 배열명=(A1 A2 A3 A4)
형태로 이루어져 있다. 이때 중요한 점은 ()
소괄호 안에 요소를 넣는다는것이다. 또한 문자와 숫자를 한배열에 넣을수 있다.
ARRAY=("A1" "A2" "A3" "A4" "A5")
lang=("C" "JAVA" "GO" "C++")
또한 배열의 요소를 따로 지정도 가능하다.
ARRAY=("A1" "A2" "A3" "A4" "A5")
lang=("C" "JAVA" "GO" "C++")
ARRAY[0]="A5" # ("A5" "A2" "A3" "A4" "A5")
lang[3]="Javascript" # ("C" "JAVA" "GO" "Javascript")
그리고 변수의 값을 배열의 요소에 지정도 가능하다.
arr="A1 A2 A3 A4 A5"
ARRAY=($arr) # ARRAY=("A1" "A2" "A3" "A4" "A5")
배열을 출력하는 방법은 간단하다 echo ${배열명[인덱스번호}
형태로 출력을 해주면 된다. 단, bash 쉘은 0부터 시작하고 z쉘은 1부터 시작한다
ARRAY=("A1" "A2" "A3" "A4" "A5")
lang=("C" "JAVA" "GO" "C++")
echo "{ARRAY[0]}" # A1
echo "{lang[1]}" # JAVA
----------------------
# zshell
echo "{ARRAY[1]} # A1"
echo "{lang[1]}" # C
다음과 같이 실행된다.
또한 @, * 같이 특수문자를 쓰면 모든 배열을 출력한다.
arr=(1 2 3)
echo $arr # 1 2 3
echo $arr[@] # 1 2 3
echo $arr[*] # 1 2 3
test 명령은 파일의 존재유무/타입/권한/비교 등을 체크할 때 사용한다. 또한, 주로 조건문이 들어가야할 위치에 test가 들어간다.test의 출력은 주로 참(True) 거짓(False)로 출력되는데 c언어와 반대로 출력이된다.
c -> 0(거짓) 1(참)
shell -> 0(참) 1(거짓)
$?
는 직전 실행한 명령의 종료 상태 값을 확인할 수 있다.
0은 참으로 성공을 의미를 의미한다 0이외의 숫자는 명령이 실패했음을 의미한다.
test 명령문은 test [파라미터]
또는 [ 조건 ]
으로 사용할 수 있다. 주의할 점은 대괄호를 사용할 때는 꼭 양쪽 끝에 공백을 추가해줘야 한다.
a=1
test a -eq 3 # a와 3이 같은지 확인하는 파라미터
echo $? # 1 거짓
-----------------------------------------
a=1
[ a -eq 3 ] # test a -eq 3 과 같은 표현이다.
echo $? # 1
파라미터 | 의미 |
---|---|
-z | 문자열의 길이가 0이면 참 |
-n | 문자열의 길이가 0이 아니면 참 |
-eq | 값이 같으면 참 |
-ne | 값이 다르면 참 |
-gt | 값1 > 값2 |
-ge | 값1 >= 값2 |
-lt | 값1 < 값2 |
-le | 값1 <= 값2 |
-a | and 연산 |
-o | xor 연산 |
-d | 파일이 디렉토리면 참 |
-e | 파일이 존재하면 참 |
-L | 파일이 심볼릭 링크면 참 |
-r | 파일이 읽기 가능하면 참 |
-s | 파일의 크기가 0보다 크면 참 |
-w | 파일이 쓰기 가능하면 참 |
-x | 파일이 실행 가능하면 참 |