ysuekkom의 IT study note

[linux 기초] 명령어 실습편 - 초간단 쉘 스크립트 작성III -함수/배열 본문

OS/linux

[linux 기초] 명령어 실습편 - 초간단 쉘 스크립트 작성III -함수/배열

ysuekkom 2022. 10. 15. 00:06

[linux 기초] 명령어 실습편 - 초간단 쉘 스크립트 작성III -함수/배열, 리다이렉션

개인 공부를 위한 기록용으로 일부 과거 자료 이전

 

###간단  스크립트
 -조건문/반복문
 -함수/배열
 -리다이렉션의 활용
 -대화식 구성/메뉴구성

 

###function 함수

function 함수명 {

  명령어

}

 

아래와같이 편의식으로 사용도 가능함.

함수이름() {

  명령어

}

 

>반복해야할 작업을 함수로 만들어두고 간편히 함수를 호출하여 사용함(반복함)

 

>반복되는 라인을 function line으로 함수선언, 필요시마다 함수명 line으로 호출하여 사용

>chmod 700 example.sh

>./example.sh

 

<<사칙연산 함수 라이브러리 만들기>>

라이브러리로 사용할 함수 모음 만들기

>vi calc

>>0으로 나눌 경우 나눌 없음 안내

사칙 연산 $ [ 연산 ] 처리

 

라이브러리 호출할 스크립트 간단 작성

>vi use_calc.sh

>chmod 700 use_calc.sh

>./use_calc.sh

 

 

#배열: 배열에 숫자 또는 문자 사용 가능

변수에 배열 선언해줘도, 처음만 나옴

>echo "${test_array}" == echo "${test_array[0]}"

[0]이 생략된 것이기 때문,

>>배열 index 0,1,2,3…

for문으로 번에 출력 가능

 

스크립트 사용 문제를 복잡하게 만들기 때문에 배열은 자주 사용되지 않음

변수 하나에 여러개의 내용을 저장하고 싶을 때는? -- 파일을 사용해서 적용함. But 배열보다 느림. (디스크에 올리고 불러와야해서)// 배열은 메모리에 올리기 때문 바로 불러올 있다.

 


###리다이렉션: /출력, 에러(==표준 스트링) 지정한 곳으로 바꿔준다. 스크립트 안에서 텍스트파일의 활용

출력 방향을 지정한 곳으로 바꿔주는 . -> while 사용 ,  < serverlist.sh

쉘스크립트 내부에서 파일로 출력방향을 지정해주면 로그파일 혹은 레포트가 만들어짐

 

표준입력 = 0. 표준출력 =1, 표준에러 =2

>ls: cannot access ~~~ :표준에러

>txt1~3까지 파일 리스트 출력: 표준 출력

 

<실습 정상적이면 ok라는 파일에, 에러가 나면 ng라는 파일에 >

WORK에서 수행

>ls -al txt1 txt2 txt3 txt4 1> ok 2> ng

표준 출력 txt1~3 파일 리스트는 ok파일에

표준 에러 No such file or directory 에러메시지는 ng파일에

 

>>실전 활용법

시스템 정보를 확인 , 이메일로 보내는 스크립트

>vi systeminfo.sh

 

 

 

>>명령의 결과를 파일로 보내고, 파일을 읽어서 메일로 보내기

report.txt파일을 만들고 명령 실행 결과 넣기

 

>touch report    //report file 생성

>cp -f /dev/null report  // report file 초기화

 

# 리다이렉션 표현

 > : 덮어쓰기(overwrite)

>> : 추가로 쓰기(append)

 

>df -h >> report

>pstrr >> report

 

....

:wq!

 

저장 확인하기

...

 

>>/dev/null 위치한 report file 내용 쌓인 확인  --> 메일로 보내기

 

>vi systeminfo.sh

>cat report | mail -s "[report]  cent1 system info" 메일주소 ---> 형식으로 작성

but, cent1에는 메일 보내는 설정 안되어있기에 주석처리로 마무리 // 형식만 확인 .

 

 

>>보기 편하게 조금 수정

>작성 초기화 ./systeminfo.sh

...

 

 

##tee  == > (overwrite)

##tee -a == > (append)

 

>report file에도 들어가고, 출력도 해줌

>./systeminfo.sh

바로 출력됨 화면에 (파일도 생성됨)

>> 스크립트 작성 확인할 사용