본문 바로가기
os/Linux

7. Shell Script

by #moonyz 2014. 10. 28.
- 사용자가 어떤 작업을 하기위해서 os에게 명령을 시킨다.
- 명령실행 방법에 따라 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

댓글