본문 바로가기

CS/리눅스

Shell 스크립트_특징

[ shell ]

  • 리눅스 운영체제에서 쉘은 사용자와 커널 사이에서 존재한다.
  • 사용자가 원하는 명령어를 커널에 전하기 위해서는 쉘에서 사용하는 언어를 다룰 줄 알아야 한다.
  • 쉘을 작동시키기 위해서 쉘 스크립트라는 언어를 사용한다.

[ 우분투의 bash shell ]

bash shell은 터미널이라고 생각하면 된다.

기본 셸은 bash(Bourne Again SHell : ‘배시 셸’)

  • 주요 shell종류에는 bash shell, C shell, ksh 등이 있는데 리눅스의 표준 shell은 bash shell이다.

 

[ bash 셸의 특징 ]

(1) Alias 기능(명령어 단축 기능) = 단축명령어

(2) History 기능 = (위/아래 화살표키)를 누르면 이전에 입력한 명령어를 볼 수 있다.

(3) 연산 기능

(4) Job Control 기능

(5) 자동 이름 완성 기능(탭키)

(6) 프롬프트 제어 기능

      *prompt란? = 컴퓨터가 사용자의 입력을 받을 준비가 되어 있다는 것을 사용자에게 알려주기 위해 화면에 나타내고 있는 신호이다 .

(7) 명령 편집 기능

 

[ 셸의 명령문 처리 방법(구성 방법) ] 

(프롬프트) 명령어 [옵션…] [인자…]

예) # rm -rf /mydir

 

[ 환경변수 ]

  • 확인 방법
  • **echo $환경변수 이름**
  • 갑 변경 방법
  • export 환경변수=값

[ 주요 환경 변수 ]

출처 : 이것이 우툰부 리눅스다

 

[ 쉘 스크립트 프로그래밍 ] 

  • C언어와 유사하게 프로그래밍이 가능하다.  (리눅스의 대부분을 C언어로 작성했기 때문)
  • 변수, 반복문, 제어문 등 사용이 가능하다. 
  • 별도로 컴파일하지 않고 텍스트 파일 형태로 바로 실행(↔ C언어는 컴파일을 하고 실행)
  • vi나 gedit, nano 으로 작성이 가능하다.
  • 리눅스의 많은 부분이 내부에 쉘 스크립트로 작성이 되어 있다.
    • 설정 파일들이 쉘 스크립트로 되어 있는데 이를 변경 쉘 프로그래밍으로 해야된다.

 

🍀[ 쉘 스크립트의 작성과 실행 ] 

✔️작성

  • nano 나 gedit으로 작성한다.
  • 확장자명은 sh로 권장(sh아니어도 되긴 함)

ex)

#!/bin/sh -> 이것은 이 파일이 "쉘 파일"이라는 것을 명시하는 것이다. 
echo "사용자이름" $USER
echo "홈 디렉터리:" $HOME
exit 0 -> 안써도 되지만 정상적으로 끝났다는 것을 알리기 위해 쓰기를 권장 

✔️실행

방법이 2가지가 있다.

방법 1) sh name.sh

sh라는 명령어는 “쉘스크립트 파일을 실행한다”라는 의미이다.

 

방법 2)

chmod +x <스크립트 파일>” 명령으로 실행 가능 속성으로 변경

⇒ “./<스크립트파일>”명령으로 실행

*여기서 그냥 name.sh로 실행하면 안 된다. → 현재 디렉터리를 못찾기 때문이다.

그래서 ./name.sh를 통해 현재 디렉토리 아래에 있는 name.sh를 실행하라는 의미이다.

  • “.”은 현재 디렉터리를 의미한다. 그러므로 현재 디렉터리의 스크립트 파일을 실행하라는 의미이다. 반드시 현재 디렉터리인 ‘./’을 입력하는 이유는 현재 디렉터리가 $PATH 환경 변수에 설정되어있지 않기 때문이다. 일반적으로 명령이나 스크립트 이름을 입력하면 셸은 $PATH 환경 변수에설정된 디렉터리만 찾아본다.

 

[ 변수의 기본 ] 

  • 변수를 미리 선언하지 않는다.
  • 모든 변수는 문자열로 취급한다. 
  • 변수 이름은 대소문자를 구분한다.
  • 변수를 대입할 때 “=” 좌우에는 공백이 없어야 한다.
  • 띄어쓰기를 저장할 때(2개 단어를 저장) 쌍따옴표를이용한다.

ex) “=” 좌우에는 공백이 없는 예시

testval=hello

echo $testval

ex) 모든 변수를 하나의 문자열로 인식하기 때문에 아래의 예시와 같이 7+5를 하면 출력 결과가 계산된 값인 12가 아니라 7+5 문자 그대로 출력된 것을 볼 수 있다. 

test=7+5

echo $test 
7+5 # 결과는 7+5이다.

ex) 쌍따옴표를 이용하여 두 단어(hello world)를 변수에 대입했다.

testval2="hello world"

 

✔️주의사항

myvar="Hi"

echo "$myvar" # Hi로 출력된다. 

echo '$myvar' # $myvar 로 출력된다. (작은 따옴표는 문자 그대로 인식하기 때문)

echo \$myvar # $myvar 문자 그대로 출력된다(백슬래시)
  • $라는 문자가 들어간 글자를 출력하려면 ‘’(작은 따옴표)로 묶거나 앞에 \을 붙여야한다.
  • “”로 변수를 묶어도 되고, 묶지 않아도 된다.

 

[ 입력 받기 ] 

read myvar  # 입력 기다림 후 입력하면 값을 저장한다.

 

[ 숫자 계산 ]

  • 변수에 대입된 값은 모두 문자열로 취급하기 때문에 계산식 또한 문자열로 취급하여 계산을 할 수 없는 상황이다. 이를 해결하기 위해서는 다음과 같은 방법을 사용한다. 
  • 변수에 들어 있는 값을 숫자로 해서 +, -, , / 등의 연산을 하려면 expr을 사용한다. 
  • 역따옴표를 사용(`)으로 감싸주어 수식으로 인식하도록 한다.
    • expr $num1 + 200
  • 주의 !  =>  +, -. /와 달리 (*)곱하기 기호는 예외적으로 앞에 역슬래시 (\)붙여야 한다.
#[case1]
01 #!/bin/sh
02 num1=100
03 num2=$num1 + 200
04 echo $num2 
# 결과값 => 100+200으로 인식하여 100+200 그대로 출력한다.

#[case2]
05 num3=`expr $num1 +  200`
06 echo $num3 
#expr을 이용하여 수식이라고 명시했으므로 100+200를 계산한 결과값인 300이 출력된다. 

#[case3]
07 num4=`expr  \\(  $num1 + 200  \\) / 10  \\*  2`
08 echo $num4
# 괄호를 쓰려면 \\을 이용한다. 
09 exit 0

 

[ 파라미터 변수 ] 

파라미터는 입력 순서대로 $0, $1, $2…의 형태를 가진다.

전체 파라미터를 나타내는 방법 = $* ($1, $2..를 나타낸다)

[예시]

#!/bin/sh

echo "실행파일 이름은 $0 이다."
echo "첫 번쨰 파라미터는 $1이고, 두 번째 파라미터는 $2 다"
echo "전체 파라미터는 $* 다"

exit 0
(paravar.sh 파일)

----------결과값----------------
sh parvar.sh 값1 값2 값3
실행 파일 이름은 parvar.sh이다. 
첫 번째 파라미터는 값1이고, 두 번쨰 파라미터는 값2이다. 
전체 파라미터는 값1, 값2, 값3다.

'CS > 리눅스' 카테고리의 다른 글

Shell 스크립트_제어문과 함수  (0) 2022.06.26