- 사용자가 어떤 작업을 하기위해서 os에게 명령을 시킨다.
2. Shell Script 형식
- 명령실행 방법에 따라 GUI, CUI
1. shell 종류
Bourne (AT&T) | - AT&T Bell 연구소의 Steve Bourne이 개발 - root account의 기본 shell - 일반사용자의 프롬프트 모양 : $ - 실행프로그램 : /bin/sh |
C | - Berkeley 대학의 Bill Joy가 C언어 기반으로 개발 - 주로 BSD계열에서 많이 사용했음. - 근대적인 shell의 시초 - 다양한 사용자 편의기능추가 - 일반사용자의 프롬프트 모양 : % - 실행프로그램 : /bin/ch |
Korn | - 현재 유닉스 계열에서 많이 사용중인 Shell - AT&T의 David Korn 개발 - Bourne shell + 사용자 편의기능 - 일반사용자의 프롬프트 모양 : $ - 실행프로그램 : /bin/ksh |
Bash | - 리눅스의 기본 shell - 다양한 명령과 편의성을 지원함 (방향키사용가능 등) - Korn + C shell의 장점을 추가 - 일반사용자의 프롬프트 모양 : $ - 실행프로그램 : /bin/bash |
2. Shell Script 형식
- # : 주석
- 1번 라인의 #!/bin/bash는 스크립트를 수행할 shell적음.
- sh 명령을 실행하려면 ① sh명령이용(sh name.sh) ② 권한이 있을 때 ./사용 (./name.sh)
① echo : 화면에 내용 출력 (printf)
여러줄을 출력하고 싶을 때 -> echo 여러개 사용 | -n : 줄을 바꾸지않고 연속출력 | `(역따옴표) 사용하여 명령어 실행 |
#!/bin/bash echo "~~~" echo "~~~" echo "~~~~" | #!/bin/bash echo -n "~~~" | #!/bin/bash echo `ifconfig | grep inet` |
② 변수사용 : 데이터를 저장하기위해 생성하는 임시 기억공간
‘변수명=값’: 선언과 동시에 사용. | #!/bin/bash fruit=apple --fruit변수에 apple저장 drink=coke -- ‘=’좌우에 공백 없이 사용 echo $fruit --fruit변수에 들어있는 값 출력 echo $drink |
‘=’기호좌우에 공백X | |
변수출력 : $변수 | |
변수값 안에 공백이 있을 경우 -> " "(쌍따옴표)로 묶어줌 | #!/bin/bash fruits="apple and orange" --변수에 공백있을 경우 " "로 묶어줌 |
환경변수 - 서버를 운영을위해 미리생성되어있는변수 - 위치 : /etc/profile 사용자의 홈디렉토리안 .bash_profile | # echo $HOSTNAME --환경변수명은 대문자로!! localhost.localdomain |
③ read함수 : 사용자로부터 값을 입력받아서 변수에 저장 (scanf)
- $변수명 : 변수에 저장된 값을 출력하기 위해 $사용.
EX) echo "Your Name is $name"
④ argument사용 : 값을 주고 스크립트를 실행할 때
- sh명령과 argument(인수) 함께 입력
EX) [root@localhost shell]# sh argu_test.sh myj seoul 123-4567
$0 $1 $2 $3
⑤ 크기비교 : 공백 주의!
-gt | (A가 B보다) 크다 | [ $A -gt $B ] |
-lt | 작다 | [ $A -lt $B ] |
-ge | 크거나 같다 | [ $A -ge $B ] |
-le | 작거나 같다 | [ $A -le $B ] |
-eq | 같다 | [ $A -eq $B ] |
-ne | 다르다 | [ $A -ne $B ] |
⑥ 숫자계산(expr)
- shell script에서는 모든 것을 문자로 인식
- 숫자 연산을 할 때 변수를 expr명령 사용
- ( )나 * 앞에 \(역슬래쉬) 붙여야함
- `expr` 구문안에서의 모든 연산자, 기호, 변수 사이에는 공백으로 한칸씩 띄워야함
EX) hap = `expr $A +$B` --숫자로인식시키기 위해 `expr`
EX) result = `expr \( $A + $B \) \* $C` --( ) 나 * 앞에 \(역슬래쉬)붙여야함.
⑦ 문자열 비교 : 공백주의!
- 문자열 같은지 다른지 비교
[ “string1”= “string2”] | = | 두문자열이 같은경우 |
[ “string1”!= “string2”] | != | 두문자열이 다른경우 |
[-z “string1”] | -z | 문자열의 길이가 0인 경우 |
[-n “string1”] | -n | 문자열의 길이가 0이 아닌경우 |
⑧ 파일관리
- shell script로 파일을 체크해서 특정작업을 할수 있다.
-f | 파일이 있는 경우 |
-s | 파일이 존재하고 내용이 있는경우 (size) |
-d | 파일이 아니고 디렉토리인 경우 |
-r | 읽기가 가능한 파일인 경우 |
-w | 쓰기가 가능한 파일인 경우 |
-x | 파일이 존재하고 실행 가능할 경우 |
!-옵션 | 옵션의 조건이 아닐경우 |
Example) ① if [ -f test.log ] --파일이 있는 경우 ② if [ !-d $fname ] --파일이 디렉토리가 아닌 경우 ③ fname=/shell/test.log if [ -s $fname ] --파일이 존재하고 내용이 있는 경우 (fname 변수사용) then echo -n "Before:" echo `ls -l /shell/test.log` cat /dev/null > $fname fi | |
** 참고 ** - listener.log : 로그인 기록 저장 - 저장용량이 꽉차면 지워야 하는 shell script cat /dev/null > listener.log --아무것도 없는 파일로 덮어씀 |
'os > Linux' 카테고리의 다른 글
9. 네트워크 (서브넷 정리 필요) (0) | 2014.10.28 |
---|---|
8. Shell Script - 조건문, 반복문 (0) | 2014.10.28 |
6. RPM / CRON (0) | 2014.10.28 |
5. 프로세스관리 (0) | 2014.10.28 |
4. LVM & RAID (0) | 2014.10.28 |
댓글