강좌 & 팁
변수
그냥 변수명을 적으면 된다. 변수의 타입이나 형을 명시하지 않는다.
변수에 값을 할당하지 않아도 특별한 문제는 발생하지 않으며, NULL로 초기화하고 나중에 값을 할당하려고 한다면 다음과 같이 한다.
name=
변수에 값을 할당할 때는 ‘=’ 기호를 사용하는데 = 사이에 공백을 넣으면 안된다.
name=JUNGJH # 맞다.
name = JUNGJH # 틀리다.
만일 입력하려는 이름에 공백이 있다면 다음처럼 한다.
name="JUNG J H"
만일 인수로 입력되는 값이 있을 때 이를 변수로 받는 방법은 ‘$숫자’ 이다. 즉, $1은 첫번째
인수이고$2는 두번째 인수이다.
변수의 내용을 출력하려면 ‘echo’를 사용한다. 이때 변수임을 알리기 위해서 $를 넣는다.
echo $name
변수에 와일드 문자를 넣어서 사용할 수도 있다.
filename=*.sh
echo $filename # 확장자가 sh로 되어 있는 파일들의 목록이 나온다.
변수를 이용하여 스트링의 일부를 변경할 수도 있다. 예를 들어 option이라는 변수에 ‘l’를 입력한 후ls ?“$option” 을 사용하면 ls ?l 과 동일한 문장이 된다.
<예.
ShellTest2.sh>
스크립트 파일 내부에서 개발자가 unset 키워드로 변수를 제거할 수 있다.
name="Jung JH"
unset name
newname=$name # newname= 과 같다.
쉘 스크립트에서도 상수를 만들 수 있다. 이때 사용되는 키워드는 ‘readonly’이다.
readonly만 쓰면 읽기전용으로 된 상수들을 모두 화면에 표시한다.
Name="Jung JH"
Readonly name # 이 후로는 값을 바꿀 수 없다.
쉘 스크립트에서는 쉘 전체가 사용하는 환경변수도 일반 변수와 똑 같은 방법으로 사용할 수 있다.
변수에 값을 할당할 때 입력줄에서 입력받은 내용을 할당하는 방법이 있다. 즉, 스크립트가 실행되는 중간에 변수에 할당할 내용을 사용자로부터 입력받은 후 그 내용을 할당하는
것이다.
이때 사용하는 키워드가 ‘read’인데 이 키워드와 변수를 함께 적으면 그 라인이 실행될 때 사용자로부터 입력할 것을 요청하게 된다.
<Grep.sh>
#!/bin/sh
echo "grep에 사용될 옵션 입력,
-l 또는 -s를 입력해주세요."
read option1
echo "검색하고자 하는 문장을 입력해주세요"
read option2
grep $option1 $option2 *
쉘에서 사용되는 특정 키워드는 다음과 같다.
$# - 명령입력 라인에서 입력된 인수의 개수를 가지고 있다.
$* - 명령입력 라인에서 입력된 전체의 내용을 포함한다. 즉, $1 ~ $n을 모두
합친것과 같다.
$$ - 쉘 프로그램이 실행되면서 사용된 프로세스의 ID 값을 가진다.
$! - 쉘 프로그램이 실행시킨 백그라운드 프로세스의 ID 값을 가진다.
<예.
shellTest.sh>
위의 키워드를 사용한 다양한 응용을 한다.
‘set’ 명령어를 이용하면 현재 쉘에서 사용되고 있는 변수들의 리스트를 확인할 수 있다.
<예.
shellTest4.sh>
쉘의 환경변수를 몇가지 확인한다.
쉘에서 변수를 사용할 때 변수에 값을 할당된 경우에는 변수가 가진 값을 사용하고, 그렇지 않으면 디폴트의 다른값을 활용하는 방법이 있다.
더 나아가 지정한 내용을 값이 할당되지 않은 변수속에 할당하는 방법도 있다.
${X:-Y} # X에 값이 있으면 그대로, 그렇지 않으면 Y를 사용,
X값 변동없음
${X:=Y} # Y가 사용되고 난 후 X에 Y값 할당
${X:?에러메시지} # X에 값이 없으면 에러메시지와 함께 종료
<예.
shellTest4.sh>
위의 예를 활용한다.