1.
*.sh 의 이름
2.
#!/bin/bash 로 시작
3.
변수 = "문자열"
echo "${변수}"
4.
실행 권한
5. 정규 표현식
- A* A다음에 0개 이상의 문자를 매칭
- A? A다음에 1개의 문자
- ^A A로 시작하는 문자열
- A$ A로 끝나는 문자열
- A|B A 또는 B가 있음 c[A|B]f : cAf cBf
- [a-z] a부터 z까지 알파벳 범위를 매칭
- ' ' 모든 셸 문자 무시
- " " $ ` \ 를 제외 무시
- `` 셸 명령 실행
- \ 특수문자 기능 제거
산술 비교
수식1 -eq 수식2 => 두 수식이 같으면 참
수식1 -ne 수식2 => 두 수식이 다르면 참
수식1 -gt 수식2 => 수식 1이 크면 참
수식1 -ge 수식2 => 수식 1이 크거나 같으면 참
수식1 -lt 수식2 => 수식 1이 작으면 참
수식1 -le 수식2 => 수식 1이 작거나 같으면 참
!수식 => 수식이 거짓이면 참
문자열 비교
"문자열1" = "문자열2" => 두 문자열이 같으면 참
"문자열1" != "문자열2" => 두 문자열이 같이 않으면 참
-n "문자열" => 문자열이 NULL이 아니면 참
-Z "문자열" => 문자열이 NULL이면 참
파일 관련 조건
-d File => 파일이 존재하고, 디렉터리면 참
-f File => 일반 파일이면 참
-e File => 파일이 존재하면 참
-s File => 파일의 크기가 0이 아니면 참
-u File => 파일에 set-user-id 가 설정되면 참
-g File => 파일에 set-group-id 가 설정되면 참
-r File => 파일이 읽기 가능이면 참
-w File => 파일이 쓰기 가능 상태면 참
-x File => 파일이 실행 가능 상태면 참
[ 조건문 if ]
if [ 조건1 ]
then
실행명령
elif [ 조건2 ]; then
실행명령
else
실행명령
fi
${#변수} 로 변수의 크기 확인 가능
&&
[ 조건1 -a 조건2 -a 조건3 ]
||
[ 조건1 -o 조건2 -o 조건3 ]
예시) load average 가 어느정도 이상이면 경고 메세지를 보내는 스크립트, PID 파일이 생성되어 있는지
[ 조건문 case ]
case 변수 in
패턴1)
실행명령 ;;
패턴2)
실행명령 ;;
*)
마지막 패턴 ;;
esac
[ 반복문 for ]
for 변수 in 값1 값2 값3
do
반복 문장
done
for 변수 in $(seq 1 10)과 같이 사용가능
for 변수 in $(cat 파일)과 같이 사용가능
[ 반복문 while ]
while [ 조건문 ]
do
반복 문장
done
while true 는 무한 루프
exit 0 은 정상종료
exit 1 은 오류
- 변수=$( ) 변수에 명령어의 결과를 집어넣을 때 실행시키는 문법
- 연산식 사용 방법 echo $[ $1 + $2 ]
- 산술 계산식 사용 변수=$(( ${변수}+1 ))
예시) 시스템 로그 디렉터리에 대한 처리, 로그 파일에 대한 검색, 텍스트 파일을 한줄 씩 읽어서 처리 등
[ 함수 ]
function 함수명 {
명령어
}
---------------------------------------
함수명 () {
명령어
}
#!/bin/bash
source 파일경로 를 통해 호출 후 함수 사용
함수명을 입력해 호출
함수 생성 후 다른 쉘스크립트에서 사용 가능
[ 배열 ]
변수=(값1 값2 값3)
변수 값 출력
- for i in $(seq 0 10) ;do echo ${배열[${i}]} ;done
- echo ${배열[*]}
[ 리다이렉션 ]
- 쉘 스크립트 내에서 텍스트 파일 활용
- 표준입력0, 표준출력1, 표준에러2
메일 보내는 명령어
cat report | mail -s "제목" 메일주소
read -p "화면에 표시 문자" 변수
read -sp "화면에 표시 문자" 변수
(s 옵션 시 입력값 안보임)
[ SED / AWK ]
sed 옵션 문자열처리_스크립트 파일명
- 텍스트 입력 스트림을 받아 출력을 제어 할 수 있는 명령
- 라인 단위로 처리하기에 지나간 라인에 대해 처리가 불가능
- 메모리를 적게사용
*처리과정
- 파일이나 입력받은 문자열을 한줄 씩 읽음
- 읽은 데이터를 명령대로 스트링 데이터를 처리
- 처리한 데이터를 표준 출력
*옵션
- -e 입력을 처리하는 하나의 처리 명령을 의미, 여러 번 지정하여 여러 번의 처리 가능
- -f sed로 처리할 문자열처리_스크립트를 파일로 만들어 놓고 명령 수행
- -n 각 명령의 결과를 화면에 출력하지 않고 print 명령을 대기
- -r 확장된 정규 표현식 사용
*문자열 처리 명령어 p d s y g
- [텍스트라인-범위]/p => print 출력
- 3,5d => delete 삭제
- 's/소스/결과/' => substitute(치환) 한줄에처음 나타나는 소스패턴을 결과 패턴으로 치환
- 시작라인,끝라인s/소스/결과/ => 지정한 범위에서 처음 나타나는 소스패턴을 결과 패턴으로 치환
- 시작라인,끝라인y/소스패턴/결과패턴/ => transform 지정한 범위에서 소스패턴을 결과 패턴으로 바꿈( 문자수가 동일 해야함)
- 명령어처리_스크립트/g => global 명령어처리 스크립트의 모든 소스패턴을 결과 패턴으로 변경
예시
- echo "테스트 문장입니다." | sed 's/테스트/test/'
- sed 's/테스트/sed test/' data.txt
- sed '3,5s/테스트/sed test/' data.txt
- sed '3,5d' data.txt
- sed 's/테스트/sed test/w 새 파일' 원본파일 => w flag를 통해 sed 결과물을 저장
- sed -e 's/테스트/test/; s/문장/문자열/' data.txt => -e 옵션과 ; 로 구분
- sed -n 's/테스트/test/p' data.txt => n옵션 사용 시 flag p 필요, s는 치환, 검색할 때 자주 사용
- sed -n '/^3/p' 파일명 => 검색 시 사용
- sed -f two.sed data.txt => 파일을 바탕으로 결과값 출력
find . -type d -name "*.txt"
find . -type f -name "*.txt"
find . -name "t[x|z]t"
AWK 옵션 읽어드릴_파일명
sed 기능 + 변수/함수/연산자를 사용해 필요한 데이터를 제어할 수 있는 명령어
- -F 필드구분자 필드를 구분하기 위한 구분자를 지정
- -f 파일이름 awk프로그램이 읽어들일 파일 이름을 지정
- -변수=변수값 awk프로그램에서 사용할 변수를 지정
텍스트파일이나 명령 실행결과에서 원하는 필드를 출력할 때 사용
필드란? 각각의 항목
default 구분자는 공백
aaa 111 zzz
bbb 222 xxx
ccc 333 yyy
ddd 444 qqq
eee 555 ddd
예시
- awk '{print $1}' txt13 => 첫번째 필드 출력
- awk '/검색어/{print $1}' txt13. => 문자열 검색
- grep 111 txt13 | awk '{print $3}' txt13 => zzz출력
- awk '/111/{print $3}' txt13 => zzz 출력
aaa;111;zzz
bbb;222;xxx
ccc;333;yyy
ddd;444;qqq
eee;555;ddd
awk -F: '{print $1}' colon_txt13 => F구분자를 통해서 구분가능
특수 문자 말고 일반적인 문자도 구분 가능
실제 예시
awk -F: '{print $1}' /etc/passwd => 사용자 이름만 출력
uptime | awk '{print $8,$9,$10}' => load average
uptime | awk '{print $8, $9, $10}' | awk -F, '{print $1,$2,$3}' => load average
uptime | awk -F"load average" '{print $2}'
'OS > Linux' 카테고리의 다른 글
백업 쉘 스크립트 (0) | 2021.03.15 |
---|---|
Shell Script 정리(디스크 용량) (0) | 2021.03.10 |
bash shell 명령어 정리 (0) | 2021.03.07 |
CentOS 설치 후 자동완성이 되지 않을 경우 (0) | 2021.02.25 |
[Linux] RAID 기본 설정 방법 (0) | 2020.12.29 |