본문 바로가기
programing/shell programing

1. 쉘프로그래밍 파일의 실행과 생성

안녕하세요. 이번시간에는 쉘프로그램 기본 구성 과 생성 실행 방법 에 대하여 알아 보겠습니다.

아래 는 1.sh 를 생성하여 A라는 변수를 실행하는 아주 기본적인 파일입니다.

그럼 기본적으로 하나씩 알아 보도록 하겠습니다.

[root@localhost ~]$vi 1.sh
#/bin/sh

A=shell;

echo $A;

[root@localhost ~]$chmod 700 1.sh

[root@localhost ~]$ ./1.sh
shell

vi 편집기를 이용하여 1.sh 라는 파일을 생성하였습니다. 사실 리눅스에서는 확장자가 따로 필요 없지만, 유저가 사용시 보기 편하도록 윈도우 처럼 확장자를 사용 하는 것이 좋습니다.

[root@localhost ~]$vi 1.sh

#!/bin/sh 은 매직넘버로 쉘 프로그래밍 파일을 작성하는데 필요로 하다.

 #/bin/sh

아래는 변수 선언인데 c언어나 자바등과 다르게 변수 타입을 지정 안해도 선언이 가능하다.

즉 A라는 변수에 shell이라는 변수를  선언하게 된다

A=shell;

echo 명령어를 이용하여 A변수의 포함되어 있는 내용을 출력 한다.

 echo $A;

쉘 스크립트 파일은 보통 두가지 방법으로 실행이 가능하다. 가장 보편적으로 사용 되는 방법은 실행 권한을 변경 하여 사용 되는 방법이다. 1.sh파일의 실행권한을 주어 실행이 가능한 파일로 권한을 변경한다. 기본적으로 777을 줘도 무방하지만, 보안상 root 의 계정에서만 사용 가능하게 하는 것이 좋다.

[root@localhost ~]$chmod 700 1.sh

실행 권한이 있으므로 다음과 같이 실행을 하게 되면 shell이란 문자를 출력 하게 된다.

[root@localhost ~]$./ 1.sh
shell

다른 방법으로 실행 권한이 없을 경우 다음과 같이 실행이 안된다. 하지만 sh 명령어를 이용하여 실행이 가능하다.

 [root@localhost ~]$chmod 444 1.sh
[root@localhost ~]$./1.sh
-bash: ./1.sh: 허가 거부됨
[root@localhost ~]$sh 1.sh
shell

그렇다면 sh 명령어는 어떤 명령어 일까? which 명령어를 이용 하여 어떤 파일인지 확인하니... 어디서 많이 본 위치가 나온다. 즉 /bin/sh 파일 상단에 있던 매직넘버 이다.  즉 쉘 파일은 지금 사용 하고 있는 bash 에 직접 입력하는 것을 파일로 저장하고 실행 하고 있는 것이다. 이해하기 어렵다면 위에 구문을 한줄씩 기본 프롬프트 에서 입력해보면 알 수 있다. 결론적으로 쉘스크립트는 단순히 프롬프트 창에서 유저가 입력하는 구문 한줄 한줄을 한번에 입력 가능 하도록 파일로 저장한 형태라고도 말할 수 있다.

[root@localhost ~]$which sh
/bin/sh
[root@localhost ~]$file `which sh`
/bin/sh: symbolic link to `bash'

tip)

위에 구문 처럼 쉘파일을 생성 하려면 vi편집기를 열고 파일 쓰고 실행권한 주고... 조금 번거롭다.

그럴때는 install 명령어를 이용하면 한줄에 해결 할 수 있다. install 명령어는 cp명령어와 하는 형태는 동일하다. 이러한 성질을 이용하여 /dev/null 는 빈 파일을 -m 옵션을 이용하여 실행권한을 주어 한번에 해경이 가능하다.

[root@localhost ~]$install -m 700 /dev/null 1.sh
[root@localhost ~]$ls -al 1.sh
-rwx------ 1 root root 0  6월 12 01:19 1.sh

 

 

 

반응형

'programing > shell programing' 카테고리의 다른 글

TC를 이용한 인터페이스 QOS  (0) 2016.02.10
pptp vpn connection kill  (0) 2016.02.10
배너 스크립트  (0) 2016.02.10
lvs자동 설정 쉘스크립트  (0) 2016.02.10
unknown ip 확인 스크립트  (0) 2016.02.10