2010. 7. 2. 16:31
IT
한 조직이 하는 일을 혼자 맡아서 해야 하는 관계로 쉘스크립트 KID가 잠깐 되었다.
몇가지 실생활에 도움이 되고 있는 스크립트 트릭들을 기록한다.
다 알고 있는 수준의 정보지만... 이정도도 하지 않고 모든걸 수작업으로 해결하는 모습이 주위에 가끔씩 보인다.
알면, 좀 쓰자. 모르면 좀 물어보자. 일을 조금더 즐겁게, 아니면 좀더 깔끔하게 하려고 생각해보자.
운영체제 : AIX 1.6
- script로 telnet 명령 실행하기
목적 : 총 66명의 유닉스 유저에 각각 접속하여 컴파일 메이크 작업을 수행해야 했다. 한줄씩만 해도 66회다.
제약조건 : 각 유저계정의 ID, password 정보를 미리 알수 있어야 한다. 컴파일 방법이 동일해야 한다.
과정 : telnet script 를 웹서핑하여 발견...
추가 : telnet script를 좀더 재사용 가능하게 재작성함.
#!/usr/bin/ksh
# name : common_telnet_cmd.sh
# telnet 으로 접속하여 컴파일등 작업수행
# 실행방법 : $0 user_id shellcommand
# 멀티 실행방법 : cat user_list | xargs -i $0 {} shellcommand;
hostt=localhost
port=23
user=$1
cmd=$2
( echo open ${host} ${port}
sleep 1
echo ${user}
sleep 1
echo ${user}XXX # 암호가 다를 경우 변수로 빼서 처리하세요...
sleep 1
echo ${cmd}
sleep 1
echo 'exit' ) | telnet - 일괄 replace
목적 : 여러 파일을 대상으로 특정 문자열을 한꺼번에 바꾸기
제약조건 : 글쎄.. 뭐 있나?
과정 : 역시 웹서핑
1단계 : 조건에 맞는 파일을 검색하여 sed 를 이용한 치환
find . -type f -name '*.source" -print | while read i
do
sed -e 's|/SAMPLE|/REAL|g' $i > $i.tmp && mv $i.tmp $i
done
이렇게 하니 잘 되긴 하는데 간혹 마지막에 캐리지리턴이 없는 파일의 경우에는 마지막 라인이 날라가는 불상사가 발생했다.
그래서 시행착오 끝에 만든 두번째 버전
2단계 : 치환 전에 먼저 파일 끝에 빈줄을 추가한다.
find . -type f -name '*.source" -print | while read i
do
echo \\n>> $i
sed -e 's|/SAMPLE|/REAL|g' $i > $i.tmp && mv $i.tmp $i
done - 실행중인 프로세스ID 가져오기, 혹은 죽이기
목적 : 종료쉘을 제공하지 않는 프로그램을 종료시킬때 사용
제약조건 : 프로그램 정보를 확실히 알고 있어야 잘못 죽이지 않는다. awk를 쓸수 있어야 한다.
과정 : 생략
조회 : ps -ef | grep 검색문자열 | grep -v grep | awk '{ print $2 }'
죽이기 : kill `ps -ef | grep 검색문자열 | grep -v grep | awk '{ print $2 }'`
이 글은 스프링노트에서 작성되었습니다.