질문&답변
클라우드/리눅스에 관한 질문과 답변을 주고 받는 곳입니다.
리눅스 분류

쉘스크립트 질문입니다...

작성자 정보

  • 빡몽 작성
  • 작성일

컨텐츠 정보

본문

안녕하세요  ^^
아래 스크립트 해석 좀 부탁 드립니다...^^

if id | grep root > /dev/null     -->> if 문인가요?  []괄호를 쓰지 않고도 동작하나요? / >/dev/null은 뭔지..?
then
echo
echo -e "\033[31m change. /../\033{0m"        -->  -e  가 뭔가요? \033 과 31m는 무슨 뜻이에요?
exit
fi

if[! -e $field ] then                 --> ! 와 -e 는 뭔가요???

꼭 좀 부탁드립니다...^^

관련자료

댓글 2

윤종일님의 댓글

  • 윤종일
  • 작성일
♠ 쉘스크립트를 이해하기 위한 기반 지식

◎ id
유효 사용자와 그룹 아이디 (uid, gid) 출력

◎ grep
grep 명령어 다음에 오는 인수를 포함하는 라인만을 출력

◎ echo
echo 명령어 다음에 오는 인수를 그대로 출력
-e 는 \ (backslash) 를 탈출문자로써 해석하겠다는 뜻 (자세한 내용은 아스키코드 참조)

◎ test
파일 타입의 체크와 값 비교

◎ 파이프 ('|')
'인수1 | 인수2' 인수1의 표준출력(stdout)을 인수2 표준입력(stdin)으로 보낸다 (출력물의 가공? 이 목적)

◎ 리다이렉션 ('>')
'인수1 > 인수2' 인수1의 표준출력(stdout) 방향을 지정 (파일 혹은 모니터)

◎ 'ASCII' 아스키코드
아스키코드는 내용이 방대합니다 링크를 참조하시기 바랍니다.
http://www.ibm.com/developerworks/kr/library/l-tip-prompt/index.html

◎ '/dev/null'
소위 블랙홀이라고 불리웁니다. 기술적으로 자세한 내용은 해당 문서를 참조 하셔야겠지만 간단히 설명하면
/dev/null로 리다이렉션되는 내용은 모두 소멸되어집니다. 즉 불필요한 내용의 출력을 걸러 폐기하고 싶을때
주로 사용합니다.



♠ 위의 쉘스크립트에 대해 이해하기

if문은 'id | grep root > /dev/null' 명령어 라인의 리턴값(종료값)이 참(0) 혹은 거짓(1) 여부를 판단하여 참이면 then 이후 명령어 라인을 실행하게 됩니다.
그렇지 않고 거짓인경우 else, elif 등으로 예외 실행을 지정할 수도 있지만 질문자님이 올려주신 스크립트 내용에는 이와같은 방법은 사용되지 않았으므로 제외합니다.

'if [ $? -eq 0 ]; then ~ fi' 와 같은 전형적인 쉘스크립트 if문을 생각하셨다면 질문자님께서 제시하신 if 문은 다소 생소하실지도 모르나 'test' 라는 명령어가 쉘스크립트 상에서 어떤식으로 사용되어지는지 확인하시면 이해하시는데 도움이 되실것 입니다.

#!/bin/sh
if test $? -eq 0; then
echo "wow"
fi

#!/bin/sh
if [ $? -eq 0 ]; then
echo "wow"
fi

위의 예제는 모두 같은 출력 결과를 가져오며 뜻하는 의미도 모두 같습니다.
결국 'test'라는 명령어는 쉘스크립트상에서 '[' 으로도 사용되며 이때는 ']'를 사용하여 test 문장을 완성 해줘야 합니다. 결국 if문은 test의 리턴값이 참(0) 혹은 거짓(1)이냐를 기준으로 하여 다음 실행을 판단합니다.
 
echo를 단독으로 사용한 라인은 단순 개행(줄바꿈)이 목적이며 다음 echo 문은 ASCII 코드를 활용한 프롬프트 형태(색) 변경이 목적입니다.

마지막의 ! 와 -e 는 test 명령의 논리 판단과정에 대해 공부하시면 금방 아실 수 있는 부분입니다.
즉 ! 는 'not', '아니다' 를 나타내며 '-e' 는 파일의 존재 여부를 판단하게 됩니다. 이때 파일이 존재하면 참(0), 존재하지 않으면 거짓(1) 값을 가지게 됩니다. 즉 해석하자면 $field 변수가 담고 있는 파일명에 대해 파일 존재 여부를 판단시 파일명이 존재한다면 참값을 가져야 하지만 앞에 !(not)에 의해 정반대의 결과를 가져오게 됩니다.

따라서 간명하게 정리하자면 위와 같은경우 파일이 존재하면 거짓(1) 값을 가지게되며, 파일이 존재하지 않는다면 참(0) 값을 가지게 되어있는 구조 입니다.

또한 if문은 test 실행 결과값을 참값(0)으로 받아야만 then 뒤의 명령어를 실행하므로 이때는 파일이 없는 경우
if문에 의해 조건 실행 절차가 진행 되어집니다.



♠ 질문자님에게 유용한 검색 키워드

ASCII 아스키코드
shell script 쉘스크립트
id 명령어
echo 명령어
grep 명령어
test 명령어
redireciton 리다이렉션
pipe 파이프
linux return value 리눅스 리턴값(종료값)
쉘스크립트 if문

대부분의 문서는 현재 리눅스포털 사이트에서 쉽게 찾아보실 수 있습니다.
행복한 하루되세요. ^^

빡몽님의 댓글

  • 빡몽
  • 작성일
감사합니다.^^

공지사항


뉴스광장


  • 현재 회원수 :  60,034 명
  • 현재 강좌수 :  35,785 개
  • 현재 접속자 :  229 명