반응형

Shell Script

쉘 실행 b.sh

1) . ./b.sh -> login sh로 실행(bash)

2) ./test.sh -> test.sh에 명시된 sh로 실행 -> 실행권한 필요!!

3) sh test.sh ->본쉘(sh)로 실행

4) bash test.sh - >bash로 실행

5) ksh test.sh - > ksh로 실행

 

변수의 기본

변수를 사용하기 전에 미리 선언하지 않으며, 변수에 처음 값이 할당되면서 자동으로 변수가 생성

모든 변수는 문자열(String)’로 취급

변수 이름은 대소문자를 구분

변수를 대입할 때 ‘=’ 좌우에는 공백이 없어야 함

 

※ 변수의 입력과 출력

‘$’문자가 들어간 글자를 출력하려면 ‘’로 묶어주거나 앞에 ‘\’를 붙임

“”로 변수를 묶어줘도 된다.

 

(expr은 띄어쓰기 잘해야함 let은 띄어쓰기 상관없음) b.sh 참고

 

※ 파라미터(Parameter) 변수

파라미터 변수는 $0, $1, $2...의 형태를 가짐

전체 파라미터는 $*로 표현

)

명령어

yum

-y

install

gttp

파라미터 변수

$0

$1

$2

$3

 

기본 if

 형식

if [ 조건 ]

then

참일 경우 실행

fi

[조건에 문장이 올 때는 대괄호 x]

 

 

조건 문에 들어가는 비교 연산자

문자열비교

결과

문자열1”=“문자열2”

두 문자열이 같으면 참

문자열1”!=“문자열2”

두 문자열이 같지 않으면 참

-n "문자열

문자열이 null(빈 문자열)이 아니면 참

-z "문자열

문자열이 null(빈 문자열)이면 참

산술 비교

결과

수식1 -eq 수식2

두 수식 또는 변수가 같으면 참

수식1 -ne 수식2

두 수식 또는 변수가 같지 않으면 참

수식1 -gt 수식2

수식1이 크다면 참

수식1 -ge 수식2

수식1이 크거나 같으면 참

수식1 -lt 수식2

수식1이 작으면 참

수식1 -le 수식2

수식1이 작거나 같으면 참

!수식

수식이 거짓이라면 참

 

elif


 형식

if [조건]

then

참일 경우 실행

 

elif [조건]

then 참일 경우 실행

else 거짓일 경우 실행

fi

 

 형식

if [조건]

then

참일 경우 실행

else

 

if [ 조건 ]

then 참일 경우 실행

else 거짓일 경우 실행

fi

fi


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

※ 파일과 관련된 조건

파일 조건

결과

-d 파일이름

파일이 디렉터리면 참

-e 파일이름

파일이 존재하면 참

-f 파일이름

파일이 일반 파일이면 참

-g 파일이름

파일이 set-group-id가 설정되면 참

-r 파일이름

파일이 읽기 가능이면 참

-s 파일이름

파일 크기가 0이 아니면 참

-u 파일이름

파일에 set-user-id가 설정되면 참

-w 파일이름

파일이 쓰기 가능 상태이면 참

-x 파일이름

파일이 실행 가능 상태이면 참

- 만 자주 씀 알아둘 것

 

case~esac (1)

if문은 참과 거짓의 두 경우만 사용 (2중분기)

여러 가지 경우의 수가 있다면 case(다중분기)

ex)

#!/bin/sh

case "$1" in

start|START|Start) &&&&& Yes|Y|Yes|YES)

echo "시작~~“;; &&&&& [nN]*) : n,N으로 시작하는 모든 문자

stop)

echo "중지~~“;;

restart)

echo "다시시작~~“;;

*)

echo "뭔지 모름~~“;;

esac

 

 

※ AND,OR 관계 연산자

and ‘-a' 또는 ’&&‘를 사용

or‘-o' 또는 ’||‘를 사용

 

ex )

#!/bin/sh

echo "보고 싶은 파일명을 입력하세요.“

read fname

if [ -f $fname && -s $fname ] <=> [ -f $fname -a -s $fname ] : 차이점 -a는 두구문에서만 사용

then

head -5 $fname

else

echo "파일이 없거나, 크기가 0입니다.“

fi

 

 

반복분 -for(1)

 

 형식

for 변수 in 1 2 3....

do

반복할 문장

done

 

ex)

#!/bin/sh

for pal in Tom Dick Harry Joe

do

echo "Hi $pal"

done

echo "Out of File"

 

반복문 -for(2)

현재 디렉터리에 있는 셸 스크립트 파일(*.sh)의 파일명과 앞 3줄을 출력하는 프로그램

 

ex)

#!/bin/sh

for fname in $(ls *.sh)

do

cat $fname >>

done

 

반복문 -while(1)

조건 식이 참인 동안 계속 반복

 

#!/bin/sh

while [ 1 ]

do

echo "CentOS 7"

done

 

반복문 -while(2)

비밀번호를 입력받고, 비밀번호가 맞을 때 까지 계속 입력받는 스크립트

 

#!/bin/sh

echo "비밀번호를 입력하세요.“

read mypass

while [ $mypass != "1234 ]

do

echo "틀렸음. 다시 입력하세요.“

read mypass

done

echo "통과~~“

 

until

while 문과 용도가 거의 같지만, until문은 조건식이 참일 때 까지 (=거짓인 동안) 계속 반복한다.

위 예 4행을 until [ $mypass = "1234" ]

 

사용자 정의 함수

 

 형식

함수이름 () {

-- 함수를 정의 내용들

}

 

함수이름 --함수를 호출

 

ex) #!/bin/sh

myFunction(){

echo "함수 안으로 들어 왔음

returu

}

echo "프로그램을 시작합니다.“

myFunction

echo "프로그램을 종료합니다.“

 

함수 파라미터 사용

 

ex) 

#!/bin/sh

hap(){

echo `expr $1 + $2`

}

echo "10더하기 20을 실행합니다

hap 10 20

 

eval

문자열을 명령문으로 인식하고 실행

 

#!/bin/sh

str="ls -l anaconda-ks.cfg"

echo $str

eval $str

 

set$(명령어)

리눅스 명령어를 결과로 사용하기 위해서는 $(명령어) 형식을 사용

결과를 위치변수로 사용하고자 할 때는 set과 함께 사용

 

#!/bin/sh

echo "오늘 날짜는 $(date)입니다,“

set $(date)

echo "오늘은 $4 요일 입니다.“

 

cut 명령어

cut 명령어는 텍스트 파일 내용 중 부분을 지정하여 출력하는 명령어이다.

옵션

-b : byte, 특정 자리만 출력

-c : character(자리수)로 구분하여 출력

-d : 인자로 받은 문자열을 기준으로 필드를 구분함

-f : -d 옵션과 함께 사용되며, 구분된 필드를 출력

 

-b옵션 사용방법

형식

의미

N

N자리

-b1

N,M,C

N자리,M자리,O자리

-b1,3,5

N-

N자리부터 마지막까지

-b10-

N-M

N자리부터 M자리까지

-b5-10

-M

처음부터 M자리까지

-b-10

 

tr 명령어

표준 입력을 표준 출력으로 내보낼 때, 선택한 문자들에 대해서 치환이나 삭제를 수행함

 

 형식

tr 'String1' 'String2' < filename

 

옵션

-d : 제거

-s : 반복된 문자에 대해서 한 번 치환 (반복된 문자를 하나의 문자로 인식)

 

tee 명령어

명령어의 결과를 화면과 파일로 동시에 출력하는 명령어

 

 문법

명령어 | tee [옵션] 파일명

옵션

-a : 파일에 내용 이어 쓰기

-i : interrupt 무시

ex)

#who | tee -a test.out

 

awk 명령어

자료 처리 및 리포트 생성에 사용하는 프로그래밍 언어

 

 문법

awk [옵션] [‘[‘/찾을문자열/’] { 명령어 }‘] 파일명 

 

필드값 변수

$0 -> 모든 필드 (행의 값 그대로)

$1 -> 첫 번째 필드

$2 -> 두 번째 필드...

$(NF-1) -> 마지막 전 필드

$NF -> 마지막 필드

 

산술연산

echo | awk '{print 3+2}'

 

grep과 같이 패턴 검색 (행 단위)

cat /etc/passwd | grep apache

cat /etc/passwd | awl /apache/

awk /apache/ /etc/passwd

 

마지막 필드의 출력

ls -l test.out | awk '{print $NF}'

 

구분자의 사용

문법

awk -F 구분자 ‘{print $위치순번}’ 파일

예제

find ~ -name "*.sh"|awk -F/'{print $NF}'

 

grepcut의 결합 사용

awk -F : '/user1/{print "username is " $1}' /etc/passwd

 

sed 명령어

비대화형 편집기

명령 행에서 직접 편집 명령어와 파일을 지정하여 작업한 후 결과를 화면으로 확인

원본을 손상하지 않는다.

 

 문법

sed [옵션] ‘명령어파일명

옵션

n : 해당 패턴 or 실행 결과만을 출력

(기본적으로 출력되는 모든 행을 막음)

명령어

p : print 명령 사용자가 지정한 행을 출력

 

ex) '1,3p' -> 1행부터 3행까지 출력

ex) '/yang/p' -> yang이 포함된 행 출력

d : delete명령 사용자가 지정한 행을 삭제

ex) ‘3d' -> 3번째 행을 삭제

ex) '3,$d' -> 3번째 행부터 마지막까지 삭제

r : read 명령 사용자가 지정한 행을 읽어온다

ex) '3r 읽어들일파일‘ [입력할파일]

---> 입력할파일의 3번째 행에 읽어들일 파일의 내용을 읽어와 출력

a\ : append 명령 검색된 패턴 아래 행에 내용을 덧붙인다.

ex) '/패턴/a\내용‘[파일명]

--> 패턴에 일치하는 행의 다음에 내용을 삽입하여 출력

i\ : insert명령 검색된 패턴 위에 내용을 덧붙인다. a\와 사용법은 동일

s : 검색패턴을 치환함

ex) 's/string1/string2/g' 파일명

유용한 표현식

sed '10,$s/^/#/' 파일명 : 10~마지막 줄 모두 주석처리

sed '/^#/d' 파일명 : 주석처리 줄 모두 삭제

sed 's/^/ /' 파일명 : 모든 라인에 1칸 들여쓰기

sed 'a\\' 파일명 : 모든 줄마다 공백라인 추가

sed '/^$/d' 파일명 : 공백라인 제거

 

배열

1차원 배열에 최대 1024개의 요소를 가질 수 있다.

배열의 요소에는 단어나 정수를 지정할 수 있다

배열 첨자는 0부터 시작한다

 

공통 쉘 배열선언

array[0]=tom

array[1]=dan

array[2]=bill

 

배열 호출

# echo ${array[0]}

tom

# echo ${array[*]}

tom dan bill

# echo ${#array[*]}

3

du :

 

※ 이외 유용한 명령어...

sort -k -n -r 5 : 5번째 열 정렬,숫자로인식,reverse

 

echo $? - > 이전 명령 오류가 없을시 0값 리턴 *********************

 

split -l 1000 test1.txt test1_ : 라인별로 나누기

-b 100m test1.txt test1_ : 용량별로 나누기

"   -d : 숫자로 구분 (파일명)

“ -d -a[n] : n자리 수로 파일명 숫자 구분

 

head -n : n만큼 앞에서 잘라서 출력

 

tail -n : n만큼 뒤에서 잘라서 출력

'Study Note > OS' 카테고리의 다른 글

[Linux] 리눅스 커널 컴파일 (fedora)  (0) 2016.03.07
[Linux] 리눅스 커널 구조  (0) 2016.03.07
[Linux] Shell & Shell 내장 명령어  (0) 2016.02.15
[Linux] Vi Editor  (0) 2016.02.15
[Linux] 기본 명령어  (0) 2016.02.15

+ Recent posts