클라우드/BashShell

초간단 쉘스크립트

고고잉 2023. 2. 26. 17:28

파이프라인&세미콜론
명령어 연속 실행
파이프라인 |  : 파이프라인 왼쪽의 명령결과 표준 스트림을 오른쪽 명령의 입력으로 사용
파이프라인을 이용해 testfile.txt의 안에 111이라는 문자열이 존재하는 지 확인
1. testfile.txt를 읽는다
2. 읽은 내용에서 111이 있는지 확인을 한다.
 1. cat testfile.txt
  2. grep 111
  -> cat testfile.txt |grep 111
cent1서버에서 cent3 서버의 루트 파티션의 용량만을 살펴보고 싶다.
1. cent3 서버에 접속한다
2. 디스크 통계를 보는 명령어를 실행한다
3. 루트 파티션의 용량만 확인한다.
--
1. ssh cent3
2. df -h
3. grep 
-> ssh cent3 "df -h | grep sda1"
세미콜론 ;  : 세미콜론 왼쪽의 명령이 끝난 후 이어서 세미콜론 오른쪽의 명령을 실행
pwd ; ls -al
cent1서버에서 cent3 서버의 로그 디렉토리 파일리스트와 디스크 통계를 보고싶다.
1. cent1서버에서 cent3서버로 접속
2. 로그 디렉토리의 파일 리스트를 본다.
3. 디스크 통계를 본다
--
1. ssh cent3
2. ls -al /var/log
3. df -h
-> ssh cent3 "ls -al /var/log ; df -h "
AND & OR
AND 조건 &&
 : AND 연산의 '하나라도 거짓이 있으면 전체 결과가 거짓' 이라는 특성을 이용
 AND 좌측 명령/테스트의 결과가 참이면 우측의 명령을 실행 (우축이 참인지 판단해야 하기 때문)
 AND 좌측 명령/테스트의 결과가 거짓이면 우측의 명령을 실행하지 않음 (이미 거짓이므로)
 A && B
 A : 참/거짓을 판단하는 조건/명령
 B : A가 참일 경우 실행할 명령
 test [1 == 1] && echo "이 문장은 조건이 참 일 경우 보입니다."
 []로 사용해도 되고 안해도 됨
OR 조건 ||
: OR 연산의 '하나라도 참이 있으면 전체 결과가 참' 이라는 특성을 이용
OR 좌측 명령/테스트의 결과가 참이면 우측의 명령을 실행하지 않음(이미 참이므로)
Or 좌측 명령/테스트의 결과가 거짓이면 우측의 명령을 실행 (우측이 참인지 판단해야 하기 떄문)
[ 1 == 2] | | echo " 이 문장은 조건이 거짓 일 때 보입니다."
 []로 사용해도 되고 안해도 됨

한 줄 스크립트
1. 다음 내용을 한 줄로 실행
- 현재위치에서 tmp디렉토리를 생성
mkdir tmp
- tmp 디렉토리 안에 tmp.txt 파일을 생성
touch tmp/tmp.txt
- tmp.txt 파일에 tmp라는 내용을 입력
echo "tmp" > tmp/tmp.txt
- tmp.txt 파일의 내용을 화면에 출력
cat tmp/tmp.txt
2. cent3 서버의 프로세스 리스트에서 nfs 프로레스를 확인
1. cent3 서버에 접속
2. 프로세스 리스트를 출력
3. nfs 프로레스를 확인
--
1. ssh cent3
2. ps -ef / ps aux
3. 2번 결과를 | grep nfs
-> ssh cent3 "ps -ef | grep nfs"
3. 2번 에서 nfs프로세스의 개수를 확인 (grep 제외)
-> ssh cent3 "ps -ef | grep -c nfs"
-> ssh cent3 "ps -ef | grep nfs | wc -l"
-> ssh cent3 "ps -ef | grep nfs | grep -v grep | wc -l"
-v : 해당 문자 제외하기
프로세스 이름을 보고 지정한 프로세스만 찾아주는 명령어
-> ssh cent3 "ps -ef | pgrep nfs"
-> ssh cent3 "ps -ef | pgrep -l nfs"
-> ssh cent3 "ps -ef | pgrep -c nfs"
4. /var/log 디렉토리 하위에서 messages로그가 있는지 확인하고 있으면
messagess 로그의 하위 15라인을 출력
test문의 조건
-e : 파일이 존재하는가
-f : 지정한 파일이 파일이면 참 그 외엔 거짓
-d : 지정한 파일이 디렉토리면 참 그 외엔 거짓
(디렉토리도 파일로 취급)
google : bash test 옵션 검색해서 찾기
1.  /var/log/messages 파일이 있는지 확인 (-e)
2. 1번이 참이면 messages로그의 마지막 15줄을 화면에 출력한다.
3. 파일이 없으면 아무것도 안한다.
--
1. [-e /var/log/messages]
2. && tail -n 15 /var/log/messages
-> [ -e /var/log/messages ] && tail -n 15 /var/log/messages
5. mount의 결과를 보기 편하게 정렬
mount  | column -t
-t : 공백을 탭으로 바꿈
6. ss의 결과를 보기 편하게 정렬
ss | cat