간단 쉘 스크립트

쉘스크립트가 어려운 분들도 있겠지만,
조금만 생각하면 그다지 어려운것도 아니다. ( 뭐는 안그렇겠어...)
일반적인 프로그램에서 주로 사용되는 반복문, 조건문, 분기문
모두 다 쉘로 구현가능하지만 이것들의 사용이나, 응답(?) 이 
사용자의 요구에 맞아 떨어 지지 않으면 이상하게 작동하는 경우도 있다.
아래의 예를 들어보자.
뭐가 적당할지 10분쨰 고민중.
목적. 현재 서버의 root 이외의 터미널 접속자들을 알아내고, 해당 사용자들을 접속 종료 시킨다.
[root@db /]# who | egrep -v '^root' | gawk '{ print $2}'
위는 who 의 결과에서, root 이외의 접속자들의 TTY를 알아내는것이다.
만약에 위의 결과가, 
[root@db /]# who | egrep -v '^root' | gawk '{ print $2}'
pts/1
pts/2
이처럼 나왔다고 가정하자.
이 경우에,
pts/1 과 pts/2를 종료 하기 위해서는 skill 이나, kill 로 할 수 있다.
어떤 방법을 사용하던 그것은 사용자 맘이고, 여기에선 skill로 하겠다.(사실 skill과 kill은 조금 차이가있다.)
skill로, pts/1 을 종료 시키는 명령은 아래와 같다.
[root@db /]# skill -KILL -v pts/1
위의 명령을 실행한 후, 다시 아래 명령어를 실행하면, 결과물이 pts/2 만 있는것을 확인할 수 있다.
[root@db /]# who | egrep -v '^root' | gawk '{ print $2}'
하지만 하고자 하는것은,
root이외의 모든 터미널 접속을 종료 시키는 것이다.
for로 구현가능 하겠다.
자! 그럼 다시, 위의 명령의 결과가 아래처럼 매우많다고 가정하자.
[root@db /]# who | egrep -v '^root' | gawk '{ print $2}'
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
for문의 기본 문법은 아래와 같다.
for 변수 in 주기
do
    명령
done
설명이 좀 애매 한데, 한번 해보도록 하자.
[root@db /]# for i in `who | egrep -v '^root' | gawk '{ print $2 }'`; \
> do
>    echo $i
> done
pts/1
pts/2
   .
   .
   .
이렇게 생각하면 좀 쉬운가?
위 for문의 기본 문법 설명에서, 주기에 해당하는 부분을 명령어로 넣었고, 
해당 명령어가 다시 i 변수에 입력되며, 
i 변수를 가지고 하고싶은 일들을 처리 할 수 있게된다.
[root@db /]# for i in `who | egrep -v '^root' | gawk '{ print $2 }'`; \
> do
>    echo $i is KILL!!;
>    skill -KILL -v $i;
> done
이런식으로 간단하게, 원하던것을 해결할 수 있게 되었다.

도움은 안되지만 이상 쓸데없는 간단 쉘 스크립트.
저작자 표시
이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
prev 1 ... 29 30 31 32 33 34 35 36 37 ... 111 next