1.1 Shell Script
1.2 Shell Script : 변수(Variable)
변수 사용시에는 "=" 기호 앞뒤로 공백이 없이 입력하면 대입연산자가 된다.
그리고 선언된 변수는 기본적으로 전역 변수(global variable)다. 단 함수 안에서만 지역 변수(local variable)를 사용할 수 있는데 사용할려면 변수 명 앞에 local
을 붙여주면 된다.
그런데 전역 변수는 현재 실행된 스크립트 파일에서만 유효하다. 자식 스크립트에서는 사용 할 수 없는 변수다.
변수 명 앞에 export
을 붙여주면 환경 변수(environment variable)로 설정되어 자식 스크립트에서 사용 가능하다.
환경 변수 사용시 예약 변수(reserved variable)에 주의하자.(참고로 환경 변수는 .bash_profile
에서 정의한다.)
예약 변수(Reserved Variable)
문자 | 설명 |
---|
HOME | 사용자의 홈 디렉토리 |
PATH | 실행 파일을 찾을 경로 |
LANG | 프로그램 사용시 기본 지원되는 언어 |
PWD | 사용자의 현재 작업중인 디렉토리 |
SHELL | 로그인해서 사용하는 쉘 |
BASH | BASH 실행 파일 경로 |
LOGNAME | 로그인 이름 |
UID | 사용자 UID |
EUID | su 명령에서 사용하는 사용자의 유효 아이디 값 (UID 와 EUID 값은 다를 수 있음) |
USER | 사용자의 이름 |
USERNAME | 사용자 이름 |
GROUPS | 사용자 그룹 (/etc/passwd 값을 출력) |
위치 매개 변수(Positional Parameters)
문자 | 설명 |
---|
$0 | 실행된 스크립트 이름 |
$1 | $1 $2 $3 ... ${10} 인자 순서대로 번호가 부여된다. 10번째부터는 "{}"감싸줘야 함 |
$* | 전체 인자 값 |
$@ | 전체 인자 값 ($* 동일하지만 쌍따옴표로 변수를 감싸면 다른 결과 나옴) |
$# | 매개 변수의 총 개수 |
1.3 Shell Script : 연산자(Operator)
논리 연산자(Logical Operators)
문자 | 설명 |
---|
&&, -a | 논리 AND |
| | , -o | 논리 OR |
산술 연산자(Arithmetic Operators)
문자 | 설명 |
---|
+ | 더하기 |
- | 빼기 |
* | 곱하기 |
/ | 나누기 |
** | 누승(exponentiation), 거듭제곱(power) |
% | modulo 나 mod (정수 나누기에서 나머지 값) |
+= | 상수값 만큼 증가(plus-equal) |
-= | 상수값 만큼 감소(minus-equal) |
*= | 상수값을 곱함(times-equal) |
/= | 상수값으로 나눔(slash-equal) |
%= | 상수값으로 나눈 나머지 값(mod-equal) |
비트 연산자(Bitwise Operators)
문자 | 설명 |
---|
<<= | 비트 왼쪽 쉬프트(쉬프트 한 번당 2를 곱하는 것과 동일함) |
<<= | left-shift-equal |
>> | 비트 오른쪽 쉬프트(쉬프트 한 번당 2로 나눔) |
>>= | right-shift-equal(<<=와 반대) |
& | 비트 and |
&= | 비트 and-equal |
| | 비트 OR |
|= | 비트 OR-equa |
~ | 비트 negate |
! | 비트 NOT |
^ | 비트 XOR |
^= | 비트 XOR-equa |
정수 비교(Integer Comparison)
문자 | 설명 |
---|
-eq | 같음 |
-ne | 같지 않음 |
>, -gt | 더 큼(> 이중 소괄호에서 사용 가능) |
>=, -ge | 더크거나 같음(>= 이중 소괄호에서 사용 가능) |
<, -lt | 더 작음(< 이중 소괄호에서 사용 가능) |
<=, -le | 더 작거나 같음(<= 이중 소괄호에서 사용 가능) |
문자열 비교(String Comparison)
문자 | 설명 |
---|
=, == | 같음 |
!= | 같지 않음 |
< | ASCII 알파벳 순서에 더 작음 |
> | ASCII 알파벳 순서에서 더 큼 |
-z | 문자열이 NULL, 길이가 0인 경우 |
-n | 문자열이 NULL이 아님 |
${변수} | 문자열이 NULL이 아님 |
파일 비교(File test operators)
문자 | 설명 |
---|
-e | 파일이 존재 |
-f | 파일이 존재하고 일반 파일인 경우(디렉토리 혹은 장치파일이 아닌 경우) |
-s | 파일이 존재하고 0보다 큰 경우 |
-d | 파일이 존재하고 디렉토리인 경우 |
-b | 파일이 존재하고 블록장치 파일인 경우 |
-c | 파일이 존재하고 캐릭터 장치 파일인 경우 |
-p | 파일이 존재하고 FIFO인 경우 |
-h | 파일이 존재하고 한 개 이상의 심볼릭 링크가 설정된 경우 |
-L | 파일이 존재하고 한 개 이상의 심볼릭 링크가 설정된 경우 |
-S | 파일이 소켓 디바이스인 경우 |
-t | 파일이 디스크립터가 터미널 디바이스와 연관이 있음 |
-r | 파일이 존재하고 읽기 가능한 경우 |
-w | 파일이 존재하고 쓰기가 가능한 경우 |
-x | 파일이 존재하고 실행 가능한 경우 |
-g | 파일이 존재하고 SetGID가 설정된 경우 |
-u | 파일이 존재하고 SetUID가 설정된 경우 |
-k | 파일이 존재하고 스티키 비트(Sticky bit)가 설정된 경우 |
-O | 자신이 소유자임 |
-G | 그룹 아이디가 자신과 같음 |
-N | 마지막으로 읽힌 후에 변경 됐음 |
file1 -nt file2 | file1 파일이 file2 파일보다 최신임 |
file1 -ot file2 | file1 파일이 file2 파일보다 예전것임 |
file1 -ef file2 | file1 파일과 file2 파일이 같은 파일을 하드 링크하고 있음 |
! | 조건이 안 맞으면 참(예: ! -e file) |