리눅 스 시스템 관리 cheatsheet
juneyr··
Linux shell scripting
Shell 이란
사용자와 OS간의 징검다리
Shell script
- 빠르고 간단한 프로토타입으로서의 역할
- 반복되는 일련의 커맨드나 유틸리티 실행 작업을 한번에 묶어서 처리한다
- 스크립트 첫줄의 # 는 스크립트를 해석할 프로그램을 지정
shell 종류
- bash : 리눅스 기본 shell. 전통 shell인 sh와 호환
- csh : c 와 비슷한 문법의 shell
- ksh : sh와 호환 O, csh 문법도 지원
- tcsh : csh의 확장판. 커맨드라인 입력기능 보강
기본문법
리다이렉션
-
입력은 키보드 , 출력은 터미널
-
각각 가상의 파일로 여겨짐. file descriptor 번호가 할당됨
-
STDIN (키보드, 0) , STDOUT(터미널, 1), STDERR(터미널, 2) 이것을 제어하고 싶을 때 입력.
-
>파일을 생성하여 출력을 저장 -
>>파일이 존재한다면, 끝에 추가하라 -
<파일의 내용을 불러온다 -
2>STDERR를 리다이렉션한다 -
>&STDERR, STDOUT 모두 리다이렉션한다 -
2>&1STDERR를 STDOUT으로 리다이렉션한다- 실행되는 에러도 모두 보여준다.
" 리눅스 cron 에서 리다이렉트안하면 계정의 메일함으로 결과가 가서 파티션 용량이 떨어진다.. 👀 파일이나 /dev/null 로 떨어뜨리는 것이 중요!
파이프
프로그램이나 명령어의 출력을 다른 명령어나 프로그램의 입력 으로 연결해주는 기능 |
프로세스의 정보를 출력한 다음 ssh 만 뽑기
파일 목록을 뽑은 다음 이 내용을 전부 cat 하기 (xargs는 인자가 많을때 사용)
변수
- 대소문자 구분,
=으로 값을 지정 - 변수를 미리 선언하지 않아도, 최초 사용시 자동 할당됨
- declare 명령어로 미리 타입을 설정할수는 있음
자주 사용되는 환경변수
- GROUPS : 유저의 그룹목록
- PWD : 현재 디렉토리
- PATH: PATH정보
- RANDOM : 0~32767 까지의 랜덤값
특수변수
$@/$*인자의 모든 값- 하지만
$#파라미터의 전체 개수$?foreground 종료의 상태값$$현재 쉘 프로세스 ID$0쉘 스크립트의 이름
인자
쉘스크립트에 넘긴 순서대로 $0(파일명) ~ $1,$2,,, 의 형식
배열
declare로 선언할 수도 있고, 배열 할당 방식도 가능
#{배열 변수명[index]}
배열명이 test[11] 의 형식이 될수도 있고 일반적인 변수명의 형태가 될 수도 있음 -> arr=(호이 호이2 호이3)
조건문
if; then fi
if then else fi
if then elif else fi
혹은 case 문
테스트 연산자
전용 내장 명령어인 [ 를 사용할 수 있음.
test -d dir 혹은
- [-d dir] 디렉토리가 맞다면 참
- [-d file] 파일이 존재하면 참
- [-f file] 파일이 존재하고 보통의 파일이면 참
- [-r file] 파일 read가 가능하면 참
- [-s file] 파일 크기가 0보다 크면 참
- [-w file] 파일 존재하고 write 가능하면 참
- [-x file] 파일 존재, 실행가능하면 참
- [-z string] 문자열의 길이가 0이면 참
- [-S sock] 파일이 존재하고 소켓이면 참
샘플
루프문
while 문
for 문
for 다음에 ; 주의
for-in문
break 문
루프문 도중 break 를 만나면 루프의 실행 블록 영역을 빠져 나온다.
여러개인 중첩 루프면 break n 으로해서 원하는 위치로 나갈수도 있음
continue 문
루프문 도중 continue를 만나면 이후 아래를 실행하지 않고 다음 루프를 실행한다. continue n 을 사용해서 원하는 루프로 이동가능함
샘플
기타 문법
IFS (Internal field seperator) 스트링에서 워드를 구별하는 필드 분리자. 스크립트 내에서 사용자가 변경가능함.
shift문 스크립트의 인수로 받은 파라미터 목록이 좌측으로 이동한다. 1 2 3 4 5가 인수일 때, shift 1 하면 인수가 2 3 4 5 그리고 갯수는 4개로 변경됨. (이동된 파라미터는 영구삭제)
exit 문 스크립트 종료하기 위해서 사용 특정 종료 코드를 반환하여 확인 가능
here document 문서의 시작과 끝의 범위를 지정해줌 보통 EOF를 사용하긴하는데 다른 구분자를 사용해도 상관없음
연산
eval 명령어 인자들을 결합한 후 평가해서 결과 값을 취함
역따옴표(backquoting)
쉘 스크립트 중, 쉘 커맨드의 결과물을 변수에 담아야할 경우 `` 를 사용
$(...)의 형식으로도 사용가능하다
산술연산
표현식을 평가
- expr를 이용
- expr 1 + 1
- 대표적인 산술계산방법
- expr 뒤에 연산식을 쓰는데, 연산자 사이에는 반드시 공백
*등은 별도의 의미이므로 \ 이스케이핑을 하든가 따옴표로 감싸준다."*"
- (()) 를 사용
- z=$(($z+3))
- let을 사용
- let i=i+100
declare -i 를 이용해서 명시적으로 변수가 정수형이 되도록 할 수 있음.
declare -i NUM 한 경우 기본 값은 0.해당변수로 산술연산을 하기 위해서는 앞뒤 공백없이 연산자를 사용하면 된다.