Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>
Misc

10. Misc

10.1. read로 사용자 입력 받기

많은 경우 프롬프트 상에서 사용자의 입력을 받아야 할 지도 모른다. 다음은 프롬프트에서 사용자의 입력을 받아들이는 방법이다.

 
#!/bin/bash 
echo Please, enter your name 
read NAME 
echo "Hi $NAME!" 

이 방법은 2개 이상의 입력을 동시에 받아 들일 수 있다.

 
#!/bin/bash 
echo Please, enter your firstname and lastname 
read FN LN 
echo "Hi! $LN, $FN !" 

10.2. 산술 계산

명령 행이나 셸에서 다음과 같이 입력해 보자.

echo 1 + 1

뭐가 나오겠는가? 입력한 그대로 나와 버린다! 흠, 이 경우에 2라는 결과가 나온다면 뭔가 실수한 거다. 그렇다면 어떻게 하면 이 계산의 결과를 화면에서 볼 수 있을까. 방법은 간단하다. 이것이 문자열이 아니라 계산이라는 것을 인식하면 되는 것이고, 더 나아가 이 계산을 변수에 넣어 버리면 echo 명령으로 볼 수 있는 것은 인지상정인 것이다. ^^ 그렇다~! 답은 바로 저것이다!

echo $((1+1))

좀 더 논리적이고 제대로 된 방법은 저것이다. 수학적인 표현으로 한 방에 인식해 버린다. 효과는 확실하다!!

echo $[1+1]

나눗셈을 제대로 하고 싶거나 혹은 더 복잡한 수학 계산을 하고 싶다면 수학적인 계산을 bc에서 처리해 버리는 것이 현명하다. 아는 분은 다 아는 이야기이지만 모르는 분을 위해 아주 짧게 떠들어 보겠다. bc는 터미널에서 그냥 입력해서 사용할 수 있는 계산기로서, 아주 정밀한 소수점 계산까지 할 수 있고, 공학 계산도 식만 세울 수 있다면 웬만하면 풀 수 있는데다가 마치 수학 패키지를 사용하듯이, 어느 정도 간단한 스크립트 형태를 만들어 수학 계산을 할 수도 있는, 그야말로 끝내주는 물건이다. 이야기가 길어졌는데, 백견이 불여일행이라고 뭐가 다른지 한번 보기나 하자.

3/4를 계산한다고 "echo $[3/4]" 라고 입력해 보자. 원래 정상적인 답은 0.75이겠지만 여기에서는 멍청하게도 0이라고 나올 것이다. 그도 그럴 것이, 배쉬에서는 오직 정수 계산만 할 수 있기 때문이다. "echo 3/4|bc -l"라고 입력하여 이 내용을 bc로 보내면 0.75라는 답을 얻을 수 있다.

10.3. bash의 경로 찾기

이 부분은 마이크가 추가해 준 부분이다.

우리는 대개 스크립트의 첫 줄에 #!/bin/bash 라고 입력하지만, 여기에서는 다른 경로에 bash가 있을 때 그것을 찾아내는 방법을 간단히 짚고 넘어가겠다. 대부분의 시스템에서는 /bin/bash의 경로에 있겠지만, 모든 시스템이 그렇다고는 말할 수 없기 때문이다.

'find ./ -name bash' 명령은 루트 디렉토리부터 모든 디렉토리를 쓸어내리며 bash를 찾는다. 그러나 이렇게 까지 할 것은 없다. bash가 있는 위치라는 것은 대개 다음 중 하나인 것이다. 이 경로를 모두 확인해 보고도 없을 때에야 find를 써 보자. 사실, 모든 디렉토리를 확인하는 것은 좀 시간 낭비다.

ls -l /bin/bash

ls -l /sbin/bash

ls -l /usr/local/bin/bash

ls -l /usr/bin/bash

ls -l /usr/sbin/bash

ls -l /usr/local/sbin/bash

혹은 'which bash'를 사용하여 찾을 수도 있다. 취향에 따라 써 보자.

10.4. 프로그램이 되돌리는 값 받기

bash에서, 프로그램이 되돌리는 값은 특별한 변수인 $?로 받는다.

다음은 어떻게 프로그램이 되돌리는 값을 받아내느냐를 보여 주는 것이다. 나는 여기에서 dada 라는 디렉토리가 존재하지 않는다고 가정하겠다. 화면에 뭔가 나오지 않는가?

 
#!/bin/bash 
cd /dada &> /dev/null 
echo rv: $? 
cd $(pwd) &> /dev/null 
echo rv: $? 

10.5. 명령 실행 결과 저장하기

먼저 MySQL이 깔려 있다는 가정 하에서 하는 말이지만, 이번에 설명할 간단한 스크립트는 이 시스템에 존재하는 모든 데이터 베이스의 모든 테이블 목록을 볼 수 있게 하는 것이다. 물론 mysql 명령을 사용하는 데 필요한 사용자 이름과 패스워드는 있어야 할 것이다. ^^

 
#!/bin/bash 
DBS=`mysql -uroot -e"show databases"` 
for b in $DBS ; 
do 
mysql -uroot -e"show tables from $b" 
done 

10.6. 다중 소스파일 사용하기

여러 파일에 걸쳐 명령 소스를 입력하여 실행할 수도 있다.

필자는 이 부분을 그냥 알아서 해 보라고 비워 두었고 아직까지 채울 기미가 보이지를 않지만..... 뭐, 말하자면 간단하다. 예컨대, 인터넷에서 원하는 만화 그림 파일을 매일 아침 다운로드 받는 스크립트가 있다고 가정하자. 이 만화 그림을 매일 바탕 화면에 깔아 놓고 싶다면 이 내용을 새로운 스크립트에 통째로 집어 넣어도 상관 없겠지만, 원하는 그림을 바탕 화면에 자동으로 깔아 놓는 스크립트에서 이 그림을 다운받는 스크립트를 불러들여 실행해도 아무 상관이 없다는 뜻이다. 이와 같은 다중 소스파일은 다른 프로그램에서도 같은 기능을 또 사용할 때 새 프로그램 안에서 불러 들이는 것 만으로도 충분히 제 기능을 하기 때문에 편리하게 이용할 수 있다.