디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

리눅스를 공부 일곱째날

펔끄유갤로그로 이동합니다. 2013.01.18 01:28:37
조회 211 추천 0 댓글 9


쉘 프로그램에서 입력을 처리 하는 방법으로는 파일에 있는 자료는 파일이름을 인자로 해서 처리할수 있고, 표준입력이나 내부 자료도 입력이 가능하다.


read명령은 사용자의 표준 입력을 받아들여 변수에 저장하는 작업을 수행한다. C의 scanf나 getchar와 유사.

read 변수이름 으로 사용할수 있다. 사용자가 문자열을 입력하는것을 기다리고 입력후 엔터를 치게되면 그 값을 변수에 저장한다.

exec < $1은 표준입력을 파일로 재지향 시킨다. 인자를 파일이름으로 주면 read 변수이름의 변수값에 파일의 내용이 표준입력으로 쓰이게 된다.

here자료는 쉘 스크립트를 입력으로 하여 쉘 명령어에게 전달하는 특별한 입력 방식이다.

명령어 << 구분자
here 자료문
구분자

형식이며 here 자료는 구분자가 나올때 까지의 자료를 말한다.

grep $1 <<EOF
kim 90
yu 100
choi 89
EOF

으로 작성하고 인자로 yu를 입력했다면 yu 100이 출력되게 된다.

진심 엎드려서 하려니까 모가지가 뿌러질거같다. 좀 편하게 하려고 했는데 더불편함.

쉘 종료는 exit 명령어로 할수있는데 인자로 1~255의 값을 가지고 인자값을 반환하여 종료상태로 저장한다.

일반적으로 쉘 프로그래밍에서 종료 상태 0은 성공 1~255는 오류코드를 나타낸다.

이전 쉘 명령의 종료상태는 쉘 변수 "$?"을 참조함으로써 알 수 있다.

echo OK 의 $?는 0
echoo OK의 반환은 1~255
exit 100의 반환은 100

bourne 쉘은 산술 연산 기능을 내장하지 않아 expr이라는 외부 명령을 통해 연산식을 사용한다.

expr은 산술 연산 외에도 문자열 비교나 부문자열(문자열 일부)을 추출하는 연산을 가지고 있다.
+,-,*,/,%
=,!=,<,<=,>,>=
&,|
match 일치하는 부문자열 길이 반환
substr 부문자열 추출
index 부문자열의 위치를 반환
length 문자열의 길이를 반환

a=1
a='expr $a+1'
echo $a
이면 2가 출력되는 식으로 사용한다.

bash 쉘은 expr 명령 대신 let이나 "(())"을 사용하면 쉽게 산술 연산이 가능하다. 또한 **,++,+=,-=,/=,*=,>>,<<,&=,|=,!,^,^=등도 가능하다.

문자열 연산은 =,!=,-n,-z가 있고 같으면 참, 같지않으면 참, null이 아니면 참, null이면 참의 값을 반환하고

산술연산은 -eq, -ne, -gt, -lt, -le, !,가 있고 수식이 같으면참, 수식이 같지 않으면 참, 수식1이 수식2보다 크면 참, 수식1이 수식2보다 크거나 같으면 참, 수식1이 수식2보다 작으면 참, 수식1이 수식2보다 작거나 같으면 참, 수식1이 거짓이면 참의 값을 반환한다.

파일 연산은"[]"구문을 사용하는데 -r, -w, -x, -f, -d가있고 파일이 존재하고  읽기 가능하면 참, 파일이 존재하고 쓸수 있으면 참, 파일이 존재하고 실행 가능하면 참, 파일이 일반 파일이면 참, 파일이 디렉토리이면 참의 값을 반환한다.

책에는 표로 깔끔하게 나와서 알아보기 쉬운데 적어놓으니 알아보기가 힘들다. 표만드는 태그라도 배워놓던가 해야겠다.

참이면 0, 거짓이면 1의 반환값을 갖는다.


쉘또한 일반 프로그래밍 언어와 마찬가지로 제어문을 갖는다. 

if, then, elif, else 구문을 가지며
if 조건문
then
        실행문
[elif 조건식
        then 실행문]
[else 
        실행문]
fi
의 구조를 갖는다
then은 조건문의 결과가 참인경우 실행할 실행문을 갖고 elif는 추가로 검사를 확장한다. else는 조건문들이 만족하지 않을때 실행하게 된다.

for구문은 반복문으로
for 인자 in 리스트
do
        실행문
done
의 구조를 갖는다
리스트는 문자열의 집합, 파일 목록이 올수있고, 단순히 프로그램에 나열될 수도 있다.

for문은 반복하려는 횟수만큼 리스트를 만들어서 사용해야한다.
for day in mon tues wednes thurs fri
do
        echo "$day{day} is a weekday."
done
같은 형식으로 사용

bash에서는 C언어의 for문처럼 "(())"을 사용해서 특정 조건이 만족될때 계속 반복가능하게 개정됬다.
LIMIT=10
for((a=1;a<=LIMIT;a++))
do
        ((sum+=a))
done
같은 형식으로 사용

while [조건식]
do
        실행문
done
-------------------------
until [조건식]
do
        실행문
done
------------------------
case 변수 in
         조건)
                실행문;;
        조건)
                실행문;;
        ..
esac
같은 구조들로 for문대신 반복실행문을 만들수도있고 C의 switch 문과 비슷한 case문도 만들수 있다. until은 while문과 반대로 조건문이 거짓일때 동작한다.

break로 반복문을 빠져 나갈수도 있고 continue로 반복문의 처음으로 돌아갈수도 있다.

bourne 쉘과 달리 bash 쉘은 함수를 제공한다. 따라서 일반 프로그래밍 언어처럼 모듈화해서 구성할수있으며, 쉘 스크립트 자체가 이미 메모리에 적재되어 실행되므로 실행 속도가 빠른편이다.

function  함수이름
{
        명령어들
}

함수이름()
{
        명령어들
}
의 구조를 갖는다.

함수 내부의 지역변수는 local var과 같이 표현할수 있고 return을 인자값으로 저장하여 종료상태를 확인할수있다.

쉘 스크립트이 디버깅은 echo 명령을 삽입해서 변수 값을 출력해보거나 tee명령으로 수행결과를 파일로 저장해서 확인할수있고, assert명령으로 특정 조건을 검사해볼수도 있다.

set 명령으로 프로그램 실행 결과를 확인할수도있다.
set명령어의 옵션은 -n, -v, -x, -u가 있고 순서데로 스크립트를 실행하지 않고 문법 에러만을검사, 명령어를 실행하기 전에 명령어를 출력, 명령어의 결과를 간단하게 출력, 정의 되지 않은 변수를 만나면 에러를 발생과 같은 내용을 갖는다.

set -xv를 스크립트에 추가하게 되면 명령어와 실행결과 출력되는 과정을 확인할수 있다.

어영부영 쉘스크립트도 했고 낼부터는 GCC를 이용해서 C를 만들어 보려그 하긔 > _ <

추천 비추천

0

고정닉 0

0

원본 첨부파일 1

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 끝까지 다 본 걸 후회하게 만든 용두사미 드라마는? 운영자 25/07/07 - -
AD 디지털 액세서리 기간한정 세일! 운영자 25/07/11 - -
공지 프로그래밍 갤러리 이용 안내 [88] 운영자 20.09.28 45391 65
2871075 몸에서 여드름이 나는 이유는 로션을 안써서래.. [1] ㅇㅇㅇㅇ(115.144) 04:41 10 0
2871072 음기 충전 발명도둑잡기(118.216) 01:47 25 0
2871071 디시클리너 프갤러(118.130) 01:43 13 0
2871069 d-bus 라이센스 발명도둑잡기(118.216) 01:37 11 0
2871067 이런 경우엔 어떻게 하는게 좋음? ㅇㅅㅇ [1] 익명의따당이갤로그로 이동합니다. 01:28 32 0
2871066 Github 갤러리 31일 차단 당했다. 발명도둑잡기(118.216) 01:19 29 0
2871065 도스에서 vesa vbe 지원하게 에뮬레이션 발명도둑잡기(118.216) 01:16 12 0
2871064 몸에서 여드름이 나는 이유는 로션을 안써서래.. ㅇㅇㅇㅇ(121.126) 00:50 13 0
2871063 전국민 다 아는데 서로만 모르는 관계 발명도둑잡기(118.216) 00:49 13 0
2871062 요즘 모기가 잘 안 보이는 이유 [2] ♥천상천하유아독존경화수월냥덩♥갤로그로 이동합니다. 00:46 30 0
2871061 모기인줄 알고 잡았더니.. [4] ♥천상천하유아독존경화수월냥덩♥갤로그로 이동합니다. 00:41 25 0
2871060 외국인 혐오선동 규탄 집회 발명도둑잡기(118.216) 00:28 13 0
2871058 나는 일본 만화풍 얼굴만 봐도 짜증이 확 나지만 발명도둑잡기(118.216) 00:13 16 0
2871057 프로미스 상표권 관련 팩트 ㅇㅇ(175.223) 00:09 31 0
2871056 깃허브 프로젝트 setting 어디서 함? 프갤러(180.231) 00:06 12 0
2871055 냥덩이에게 팩폭 일침 발명도둑잡기(118.216) 00:05 16 0
2871054 오늘은 제로 카피 공부하다 자야긋다 ㅆㅇㅆ찡갤로그로 이동합니다. 00:02 20 0
2871053 한녀에게 오염된 모모링이 천연 귀여움을 잃어버리는 과정.. ㅠㅅ ㅠ.. [3] ♥천상천하유아독존경화수월냥덩♥갤로그로 이동합니다. 00:00 18 0
2871052 한국의 미래 <엑소더스 재팬> [1] 발명도둑잡기(118.216) 07.11 15 0
2871051 러스트는 개발의 즐거움을 포기하게 만드는 언어다 루비갤로그로 이동합니다. 07.11 29 0
2871049 림월드 같은 시뮬겜 만들기 어렵나 [1] 뉴진파갤로그로 이동합니다. 07.11 22 0
2871048 허니패밀리-남자 이야기 [1] 발명도둑잡기(118.216) 07.11 15 0
2871047 그리스 고대 원형극장 소리 발명도둑잡기(118.216) 07.11 11 0
2871046 59.14 임마 빡고수네 [10] ㅆㅇㅆ(124.216) 07.11 66 0
2871045 현존하는 모든 운영체제 뚫는 밀리터리 그레이드 백도어 취약점 [1] 발명도둑잡기(118.216) 07.11 30 0
2871044 러스트 빠돌아 내가 2022년, 2023년 뭐라 했냐. 인생 낭비라 했지 [3] 루비갤로그로 이동합니다. 07.11 28 0
2871043 무자막 케이온 정주행 수련 on 아스카영원히사랑해갤로그로 이동합니다. 07.11 16 0
2871042 나님 누엇어양⭐+ [1] ♥천상천하유아독존경화수월냥덩♥갤로그로 이동합니다. 07.11 21 0
2871041 dbus 소스코드 봤어? 내부적으로 SO_PEERCRED 사용하잖아. 루비갤로그로 이동합니다. 07.11 18 0
2871040 농부가 된 임베디드 프로그래머 [1] 발명도둑잡기(118.216) 07.11 20 0
2871039 제미니 교육시키는 중 ㅎㅎ ㅁㅌ겟다 루비갤로그로 이동합니다. 07.11 18 0
2871037 나님 소통합니당 질문질 받웅⭐+ [1] ♥천상천하유아독존경화수월냥덩♥갤로그로 이동합니다. 07.11 21 0
2871036 나님 왤케 특별하실깡? ♥천상천하유아독존경화수월냥덩♥갤로그로 이동합니다. 07.11 19 0
2871035 한가인이 남편에게 절대 하지 않는다는 것 발명도둑잡기(118.216) 07.11 28 0
2871034 네, 오늘 다국어 입력기 설계를 주제로 나눈 대화를 요약해 드리겠습니다. [1] 루비갤로그로 이동합니다. 07.11 34 0
2871033 돌대가리 제미니.. 궤변을 늘어놓네 [1] 루비갤로그로 이동합니다. 07.11 32 0
2871032 보통 TCP 4계층에서 바이트 기반이라고 표현하지 않나 [2] ㅆㅇㅆ(124.216) 07.11 47 0
2871031 ❤✨☀⭐⚡☘♥+나님 시작합니당♥+☘⚡⭐☀✨❤ ♥냥덩이♥갤로그로 이동합니다. 07.11 18 0
2871030 골때리는 제미니 ㅎㅎ 루비갤로그로 이동합니다. 07.11 17 0
2871028 윈도우, 아이폰, 안드로이드폰에 주기적으로 스크린샷 찍어서 본사로 전송능 발명도둑잡기(118.216) 07.11 27 0
2871026 제로카피의 개념을 잘못 이해하고 있는듯 [8] 프갤러(59.14) 07.11 57 1
2871025 앱 출시하는거 너무 고통스럽다 [1] 프갤러(121.162) 07.11 30 0
2871024 노트북에 리눅스 세팅해서 사용한지 몇주 되었는데 [2] 프갤러(221.167) 07.11 27 0
2871023 "재벌도 요구르트 뚜껑 핥아먹냐"는 글 내가 일기에 최초로 쓴 사람이다 [2] 발명도둑잡기(118.216) 07.11 16 0
2871022 함수스택 제대로 쓸 줄 모르면 c나 cpp 만지면 안되는구나 [2] ㅇㅇ(118.235) 07.11 40 0
2871021 내가 컴딸배였구나 [2] 개멍청한유라갤로그로 이동합니다. 07.11 25 0
2871019 회사에서 모든 AI 서비스 다 결제해준단다 [1] 프갤러(211.234) 07.11 58 0
2871018 프로그래머의 도구 같이 나눔해봐용 [1] 익명의따당이갤로그로 이동합니다. 07.11 45 0
2871017 챗티씨 모바일웹 이미지 업로드 막아놨더라 헬마스터갤로그로 이동합니다. 07.11 21 0
뉴스 김창옥, 소통 전문가도 말못할 고민으로 정신과 치료를 받던 시절...‘나는 자연이다’가 큰 위로 디시트렌드 07.10
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2