2022-02-11 · 3

쉘 스크립트

linuxshell

이 글은 작성된 지 2년이 넘었어요. 내용이 오래됐을 수 있어요.

-   chmod 700(755) [a.sh](http://a.sh) → ./a.sh
  • 변수지정
    • TXT=”HelloWorld”
    • = 양옆으로 공백이 있어선 안됨
  • 변수 호출
    • ${TXT} 이런식으로 변수를 사용가능
    • “${TXT}”
  • 읽기
    • read

조건문

  • if [ 조건문1 ]; then
    • 조건문 1이 참일 경우 실행할 명령어
  • elif [ 조건문2 ]; then ←- 조건이 필요한 경우 추가 가능
    • 조건문1은 거짓이고 조건문 2가 참일경우 실행할 명령어
  • else
    • 조건문 1, 조건문2가 모두 거짓일 경우 실행할 명령어
  • fi

비교표

숫자 비교문 설명 문자 비교문 설명 파일 비교문 설명

<table style="border-collapse: collapse; width: 100%;" border="1" data-ke-align="alignLeft"><tbody><tr><td>A -eq B</td><td>A 와 B가 같은가</td><td>A = B</td><td>문자 A, B가 같은가</td><td>-d file</td><td>파일이 존재하고 디렉토리인가</td></tr><tr><td>A -ge B</td><td>A가 B보다 크거나 같은가</td><td>A != B</td><td>문자 A, B가 다른가</td><td>-e file</td><td>파일이 존재하는가</td></tr><tr><td>A -gt B</td><td>A가 B보다 큰가</td><td>A < B</td><td>문자열 A가 B보다 작은가 (바이트)</td><td>-f file</td><td>파일이 존재하고 파일인가</td></tr><tr><td>A -le B</td><td>A가 B보다 작거나 같은가</td><td>A > B</td><td>문자열 A가 B보다 큰가 (바이트)</td><td>-r file</td><td>파일이 존재하고 읽을 수 있는가</td></tr><tr><td>A -lt B</td><td>A가 B보다 작은가</td><td>-n A</td><td>A의 문자열 길이가 0 보다 큰가</td><td>-s file</td><td>파일이 존재하고 비어 있지 않은가</td></tr><tr><td>A -ne B</td><td>A와 B가 같지 않은가</td><td>-z A</td><td>A의 문자열 길이가 0인가</td><td>-w file</td><td>파일이 존재하고 쓰기가 가능한가</td></tr></tbody></table>

case

case 변수 in
	패턴 1)
		패턴1이 참일 경우 실행할 명령어;;
	패턴 2)
		패턴2가 참일 경우 실행할 명령어;;
	*)
		위에서 지정한 모든 패턴에 해당이 안되는 경우 실행할 명령어;;
esac

반복문

for

for 변수 in 변수에 넣을 데이터
do
	데이터가 끝날때까지 반복해서 실행할 명려어
done

while

while 조건문
do
	조건이 참일 동안 반복해서 실행할 명령어
done
  • 호스트 네임 출력 반복문
#!/bin/bash

for SVR in 22.1.24.10 22.1.24.20 22.1.24.30
do
	echo "This is ${SVR} Server"
	ssh ${SVR} "hostname"
done
  • seq 사용 반복문
for NUM in $(seq 1 3)
do
	echo "[${NUM}] 을 출력합니다"
	echo ""
done
  • nginx start/restart/stop/status 쉘 만들기
#!/bin/bash

 ./nginx.sh start
 ./nginx.sh restart
 ./nginx.sh stop

CMD=$1

case "$CMD" in
start)
	systemctl start nginx;;
restart)
	systemctl restart nginx;;
stop)
	systemctl stop nginx;;
status)
	systemctl status nginx;;
*)
	echo "wrong code";;
esac
  • 예시1 : 로드 5 이상이면 메시지를 출력

  • 예시2 : nginx의 프로세스 넘버를 출력 후 시스템 종료

    • ps - ef | grep nginx
    • pgrep -l nginx / pgrep -a nginx / ps axfwwww | grep nginx
    • systemctl status nginx | grep nginx→
  • 예시3 : hostname을 알아낸 뒤에 이것이 kerberos 서버인지 아닌지 판별

  • 예시 4: 네트워크 어뎁터 설정 변경

반대의 경우도 만들어보기

  • 예시 5 : /var/www/html 이 있는지 있다면 그게 파일인지 확인하는 스크립트 한줄로
  • 예제 6 : 크론탭을 사용하여 매분마다 시스템시간을 알려주는 쉘파일을 실행시키게 해주는 스크립트 정각이되면 happy day 거 되게 출력
  • 예제 7 : /var/log/apache2/acess.log 파일을 5분마다 ~ .bak(년월일분) 으로 파일을 생성하고 /var/log/apache2/backuplog에 저장 그리고 access.log 내용을 지우기
  • 부팅시 iptables nat 를 적용하고 tcp 포트 1~80까지 포워딩 정책을 막는설정

원문: tistory — 2022-02-11 발행, 이 블로그로 이전됨.

댓글

댓글을 삭제할까요?

관련 글

쉘 스크립트 · 나봄하랑