티스토리 뷰

OS/리눅스

Ubuntu16.04 - 괄호 실습

donie 2020. 12. 15. 06:45

1. parentheses, braces : cur-shell, sub-shell 예제

ex_cmd.sh 파일을 아래와 같이 작성한다. vi 이용.

 

그리고 해당 프로그램을 실행시켰을 때, 아래와 같은 오류가 발생하였다.

 

이것은 읽고(r) 쓰고(w) 접근하는(w) 권한에 대한 모드 때문이었다. chmod로 모드를 변경할 수 있다.

chmod에 대한 man페이지

 

chmod를 이용해서 ex_cmd.sh의 모드를 변경한 후 실행하면 아래와 같다.

위의 ( ) 로 실행한 명령어는 자식 프로세스를 하나 더 만들기 때문에 ex_cmd.sh가 두개가 보이고,

아래의 { } 로 실행한 명령어는 자기 자신 프로세스에서 실행하기 때문에 ex_cmd.sh가 하나로 보인다.

 

2. refactoring 예제

1) expr 사용

vi로 sum_100.sh를 작성하였다.

expr을 사용해서 while loop를 만들었다.

 

모드를 변경하고 실행하면 결과 화면은 아래와 같다.

맨 끝에 출력된 4490, 4693 은 마지막 PID이다.

이 두 PID의 차이로 두 개 사이에 몇 개의 프로세스가 생성되었는지를 알 수 있다.

4693 - 4490 = 203

expr 명령을 한 번 실행할 때마다 자식 프로세스가 하나 생성된다.

1~100을 더할 때 expr 을 두번씩 100번 반복되었으니 200번 expr이 실행된 것. (=200개의 자식 프로세스가 생성된 것.)

이것은 시스템에 부담이 간다.

 

2) (()) 이용.

vi로 sum_100_2.sh를 작성하였다.

(())을 사용해서 while loop를 만들었다.

sum과 iter계산하는 부분을 ((sum=sum+iter))이런 식으로 바꾸고 싶었는데, 문법이 틀려서인지 계속 실행에 실패했다.

 

모드를 변경하고 실행하면 결과 화면은 아래와 같다.

6102 - 6101 = 1

cat 명령어로 인해서 하나의 프로세스가 증가한다.

즉 이 프로그램은 해당 프로세스에서 모든 연산을 수행한다.

 

3) 1~20000 합산 예제. expr 사용

1)에서 1~100까지 더했던 것을 20000으로 숫자만 바꾸었다. 귀찮아서 파일이름은 그대로 진행.

해당 셸 코드를 사용할 때 얼마만큼의 시간이 필요한지 계산하였다.

 

4) 1~20000 합산 예제. (( )) 사용

2)에서 1~100까지 더했던 것을 20000으로 숫자만 바꾸었다. 귀찮아서 파일이름은 그대로 진행.

해당 셸 코드를 사용할 때 얼마만큼의 시간이 필요한지 계산하였다.

3)에 비해 훨씬 수행 시간이 빠르다. 3은 프로세스를 새로 많이 만들기 때문.

sys는 커널이 소요한 시간

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함