○ 따옴표
쉘 스크립트 사용에서는 인용 부호가 3종류가 있습니다.
3종류의 각각 인용 부호에 대한 정의를 분명하게 해야합니다.
부호마다 결과가 다르기 때문에 자세히 알고 넘어가도록 하겠습니다.
예시를 보는 것이 효과적이기 때문에 간단하게 다 예시로 보여드리겠습니다.
● 큰 따옴표
▷ 몇몇을 제외한 문자외에는 문자열 그대로 출력
▷ 변수가 가진 값을 출력 ($사용)
▷ $(달러 기호), `(역 따옴표), \(백 슬래시)
큰 따옴표는 이 3문자 외에 대부분의 문자를 무시
예시
# echo "$HOME"
>> /root (사용자 계정 홈 디렉토리 출력)
● 작은 따옴표
▷ 문자열 그대로 출력
▷ 작은 따옴표는 모든 문자를 무시
예시
# echo '$HOME'
>> $HOME (문자 그대로 출력)
● 역 따옴표
▷ 명령어를 실행한 결과를 출력
▷ 보통 어떤 명령어 결과값을 담거나 출력할 때 사용
예시
# echo `pwd`
>> /root (현재 위치 출력)
● 따옴표 사용 예시
▷ 큰 따옴표 출력하는 방법 (예시일 뿐 응용할 수 있는 건 많습니다.)
# echo "\"" \(백 슬래시)를 이용하여 문자 그대로를 유지시켜줘서 "를 출력
# echo \" \를 이용하여 문자 출력
# echo '"' 작은 따옴표를 이용하여 문자열 그대로 출력
▷ 작은 따옴표 출력하는 방법
# echo "'" 큰 따옴표를 이용하여 문자열 출력
# echo \'
▷ 역 따옴표는 작은 따옴표안에 넣으면 실행이 되지 않습니다.
# echo 'abcd `pwd`' 모두 문자열로 인식
결과는 abcd `pwd`로 출력됩니다.
▷ 역 따옴표는 큰 따옴표안이나 그냥 사용해야 인식합니다.
# echo "abcd `pwd`"
# echo abcd `pwd`
결과는 동일하게 abcd /root로 출력됩니다.
작은 따옴표와 큰 따옴표는 변수를 치환할 필요가 있는지 고려하여 사용하면 됩니다.
이 정도 완벽히 다룰 줄 알면 응용해서 나중에 편하게 다루실 수 있습니다.
○ cut
▷ 문자열을 자를 때 주로 사용하는 명령어
사용법
# cut [옵션] [파일명]
자주 사용하는 옵션
-d, -f를 자주 사용하고, -d는 구문자이고, 옵션은 상황에 따라 b,c,f중 택 1하시면 됩니다.
옵 션 | 의 미 |
-d (delimiter) | 필드 구분자를 지정 (미설정시 기본 필드 구분인 tab) |
-f (fields) | 파일 필드 기준으로 추출, 구간 설정 |
-c (character) | 문자수를 기준으로 추출 |
-b (byte) | 바이트를 기준으로 추출 (대부분 네트워크에서 데이터 들어올 때 사용) |
예시
일단 아주 간단한 예시로 감을 가져보도록 하겠습니다.
파이프(|)는 앞에 명령 결과에 또 다른 명령을 씌우는 것입니다.
다음 글에 자세하게 다중 명령어를 참조하시면 됩니다.
# echo "a,B,c,d,E,f" | cut -d "," -f 2,5
출력 결과는 B,E 로 나옵니다.
# echo "a,B,c,d,E,f" | cut -d ',' -f 2-5
출력 결과는 B,c,d,E 로 나옵니다.
# echo "a,B,c,d,E,f" | cut -d , -f 2-
출력 결과는 B,c,d,E,f 로 나옵니다.
예시 3개만 봐도 감이 올 것입니다.
구분자도 큰 따옴표안에 넣어도 되고, 작은 따옴표안에 넣어도 되고, 안써도 됩니다.
첫 문자만 잘라보기
# echo pfighting | cut -c 2-
출력 결과는 fighting로 나옵니다.
마지막 문자만 잘라보기
# echo fightingg | rev | cut -c 2- | rev
rev는 reverse의 약자로 한 행의 내용을 거꾸로 출력하는 명령입니다. (cat명령의 반대라고 생각하시면 됩니다.)
출력 결과는 fighting로 나옵니다.
이제는 조금 실용적인 예시를 써보겠습니다.
# cat /etc/passwd에서 한번 해보겠습니다.
# cut -d : -f 1 /etc/passwd
구분자는 : 로 하고 나누는 기준에서 첫번째 열에 있는 사용자 계정명들을 쫙 볼 수 있습니다.
이런식으로 cut명령어를 사용합니다.
○ sort
▷ 텍스트 파일의 행단위를 정렬할 때 사용하는 명령어
▷ 숫자, 알파벳 순으로 정렬해주는 명령어
사용법
# sort [옵션] [파일명]
자주 사용하는 옵션
옵 션 | 의 미 |
-r | 내림차순 정렬 (기본은 오름차순) |
-t | 구분자 지정 |
-k | 정렬할 열 지정 |
-n | 숫자를 기준 |
-u | 중복 라인 제거 |
예시
# cat a 파일이 있다고 가정해봅시다.
이름, 지역, 직업, 월급
철수, 부산, 사업가, 800
영희, 서울, 디자이너, 300
지은, 경기, 연예인, 600
# tail -3 | sort -t , -k 4 -r a
a라는 파일을 뒤에서 3줄 출력, t옵션으로 구분자를 ','정하고,
k옵션으로 정렬할 열을 4번째 열인 월급으로 정하고,
r옵션으로 내림차순 정렬합니다.
월급이 높은 순으로 정렬하기 위한 설정입니다.
이런식으로 정렬할 때 사용합니다.
○ uniq
▷ 중복을 제거하는 명령어
(중복된 내용의 행이 연속으로 있으면 하나만 남기고 삭제)
▷ 전체적으로 분산된 중복은 찾아낼 수 없기 때문에 순차적으로 만든 뒤에 적용해야 함
(sort와 같이 쓰기 좋습니다.)
사용법
# uniq [옵션] [파일명]
보통 sort로 정렬하고 난 뒤 # uniq 명령을 입력하면 중복된 것을 제거해줍니다.
자주 사용하는 옵션
옵 션 | 의 미 |
-c | 몇 번 중첩되었는지 알려주는 옵션 |
-d | 중복 라인만 출력하는 옵션 |
-u | 중복되지 않는 라인만 출력하는 옵션 |
○ wc
▷ 해당 파일의 단어의 수를 세어주는 명령어
▷ 내용의 줄, 단어, 문자 수를 출력할 수 도 있습니다.
사용법
# wc [옵션] [파일명]
자주 사용하는 옵션
옵 션 | 의 미 |
-w | 단어 수만 출력 |
-l | 라인 수만 출력 |
-c | 문자 수만 출력 |
예시
# wc /etc/passwd
21행 29단어 총 문자수 928(개행문자까지 포함) 이라는 뜻입니다.
# cat test | grep "root" | wc -l
test 파일에서 root포함된 줄 수 출력
쉘 스크립트에서 사용 방법은 엄청 많습니다.
댓글