♦ 조건문의 형식

 조건문은 []로 묶어지며 [ -f /etc/passwd ] 조건식을 주었을 때 [ -f 조건식은 공백을 꼭 띄워 주며, 조건의 끝임을 알리는 ;을 입력하며, 만일 then 문장을 입력할 때는 ; 을 생략해도 >된다

if [ 조건 ]; then

             문장

elif [ 조건 ]; then

             문장

else

             문장

fi

if command; then

             문장

elif command; then

             문장

else

             문장

fi

 

test 명령어 연산자

test 명령어는 뒤에 오는 조건식을 검사하여 참, 거짓 여부를 판단 할 수 있다.

)         test expressions

             [ expressions ]

 

산술 비교 연산자

제어문

설명

val1 –eq val2

equal, 변수 val1과 변수 val2 같은 경우 true

val1 –ne val2

negative, 변수 val1과 변수 val2 다른 경우 true

val1 –gt val2

greater then, 변수 val1이 변수 val2 보다 큰 경우 true

val1 –lt val2

less then, 변수 val1이 변수 val2 보다 작은 경우 true

val1 –ge val2

greater or equal, 변수 val1이 변수 val2 보다 크거나 같은 경우 true

val1 – le val2

less or equal, 변수 val1이 변수 val2 보다 작거나 가은 경우 true

 

파일 검사 연산자

제어문

설명

-a

파일이 존재한 경우 true

-b

파일이 존재하고 블록장치 파일인 경우 true

-c

파일이 존재하고 캐릭터 장치 파일인 경우 true

-d

파일이 존재하고 디렉토리인 경우 true

-e

파일이 존재하고 파일이 있는 경우 true

-f

파일이 존재하고 정규 파일인 경우 true

-g

파일이 존재하고 SetGID가 설정된 경우 true

-h

파일이 존재하고 한 개 이상의 심볼릭 링크가 설정된 경우 true

-k

파일이 존재하고 Sticky bit가 설정된 경우 true

-p

파일이 존재하고 FIFO인 경우 true

-r

파일이 존재하고 읽기 가능한 경우 true

-s

파일이 존재하고 0보다 큰 경우 true

-u

파일이 존재하고 SetUID가 설정된 경우 true

-w

파일이 존재하고 쓰기가 가능한 경우 true

-x

파일이 존재하고 실행 가능한 경우 true

 

문자열 비교 연산자

제어문

설명

-z string

문자열의 길이가 0인 경우 true

-n string

문자열의 길이가 0이 아닌 경우 true

string1 = string2

문자열 string1string2가 일치하는 경우

string1 != string2

문자열 string1string2가 일치하지 않는 경우

string

문자열이 NULL이 아닌 경우

 

예제

#!/bin/bash

# $# 입력 받은 매개 변수의 개수를 의미

if [ $# -lt 1 ]; then

             echo “$0 <Account>…”

             exit 0

fi

 

# 명령의 결과를 저장하기 위해 `( back quarter)를 사용했다.

# ‘(single quarter)과 혼동 할 수 있으므로 주의 하도록 한다.

ret=`grep –w “^$1” /etc/passwd`

 

if test –n “$ret” ; then

             echo $ret

else

             echo “User not found”

fi

 

원문 : Linux system & Shell programming(영진 닷 컴)

Posted by kukuta

댓글을 달아 주세요

  1. 444 2013.10.28 18:49  댓글주소  수정/삭제  댓글쓰기

    산술 비교 연산자 qt...

  2. 444 2013.10.28 18:49  댓글주소  수정/삭제  댓글쓰기

    산술 비교 연산자 qt...

  3. 좋은 자료 감사합니다 2016.04.29 11:31  댓글주소  수정/삭제  댓글쓰기

    좋은 자료 감사합니다

  4. guest 2016.05.11 16:08  댓글주소  수정/삭제  댓글쓰기

    자료 감사합니다.

  5. SJ 2019.10.15 14:14  댓글주소  수정/삭제  댓글쓰기

    감사합니다 힘내세요^^

1. Shell?

  shell이란 kernel 프로그램 사용자 인터페이스를 제공하는 중간 매개체이다.

  사용자가 shell에서 제공하는 프롬프트를 이용하여 명령어를 입력하면 shell 입력 받은 명령어를 kernel 실행 있는 언어로 변환하여 전달 실행되기 때문에 보통 shell 명령어 해석기라고 한다.

 

2. Shell 변경 확인


2.1. 사용 가능한 Shell 확인

  # chsh –l or 또는 cat /etc/shells 입력하면 사용 가능한 shell 출력된다.


2.2. Shell 변경

  다른 쉘로 변경하기 위해서는 프롬프트 상에서 “chsh” 입력하면 새로운 프롬프트를 생성한다. 이때 바꾸고자 하는 쉘이 있는 패스를 적어주면 된다. 이렇게 쉘을 변경하게 되면 /etc/passwd 파일 내에서도 기존의 쉘이 새로 지정한 쉘로 변경된다. 또한 “chsh –s /bin/csh” 실행하면 현재 로그인한 쉘을 변경하게 된다.


3. Shell 명령어


명령어

설명

:

항상 명령어의 실행 값은 참을 반환하며 아무런 액션도 발생하지 않는다. 참값을 반환하기 때문에 “while : ; do” 같은 형태로 루프문에서 무한 루프를 설정하고 사용된다.

.

지정한 파일로부터 읽거나 실행

alias

명령에대한 앨리어스 지정

bg

특정한 프로세스를 백그라운드로 진행

bind

readline에서의 또는 함수, 매크로에 순서를 결합하고자 사용

break

루프문에서 루프문을 탈출하고자 사용

builtin

내부 명령어나 함수를 실행할 사용할 있으며 스크립트에서 외부명령어와 내부명령어가 같은 이름으로 존재할 내부 명령어만을 실행한다. 만일 지정한 내부 명령어나 함수가 존재하지 않는다면 에러를 출력한다.

cd

디렉토리 이동 명령어

command

내부 명령어 외부 명령어를 실행하며 세부적인 정보를 출력할 있는 명령어

continue

루프문에서 루프문의 처음으로 되돌아 사용하는 명령어

declare

변수를 선언하거나 속성을 부여하고자 사용하는 명령어

dirs

현재 저장되어 있는 디렉토리 리스트 목록 출력

disown

쉘에서 활성화 되어 있는 작업 테이블에서 특정한 작업 목록을 삭제

echo

입력된 문자열의 출력

enable

내부 명령어의 활성화 비활성화

eval

설정되어 있는 인자를 명령어로 변환

exec

현재 프로세스를 치환

exit

종료

export

지정한 환경변수를 하위 프로세스까지 전달

fc

히스토리 편집 출력

fg

포그라운드에서 실행

getopts

명령어의 옵션을 분리하는 명령어

hash

입력한 명령어에 대한 경로를 해쉬 테이블에 저장하여 명령어를 다시 호출할 시스템 패스 $PATH에서 검색하지 않고 해쉬 테이블에서 검색

help

내부 명령어 도움말 출력

history

이전에 사용한 명령어의 출력

jobs

실행중인 작업 목록을 출력

kill

현재 실행중인 프로세스 중단

let

산술 논리 계산

local

로컬 변수의 선언 호출

logout

로그 아웃

popd

저장된 디렉토리 스택으로 부터제거

printf

정형화된 데이터의 출력

pushd

디렉토리 스택으로 저장

pwd

현재 디렉토리 출력

read

프롬프트로부터 데이터 입력

readonly

프롬프트로부터 읽기 전용의 데이터 입력

return

호출한 부모 프로세스로 반환 되는

set

변수 설정

shift

위치 매개 변수의 이동

shopt

옵션의 출력 설정

source

지정한 파일로부터 읽거나 실행

suspend

특정한 신호를 받을 까지 일시 중지

test

조건식을 평가

times

프로세스가 사용한 시간을 출력

trap

명령어 실행 도중 특정한 신호가 입력되었을 때의 처리

type

지정한 명령어가 내부 명령어인지 외부 명령어인지를 출력

typeset

declare 같은 의미

ulimit

시스템 자원을 제한

unmask

파일 디렉토리에 대한 생성 마스크 설정

unalias

앨리어스 해제

unset

함수 변수의 초기화

wait

하위 프로세스가 종료 까지 대기


3.1. 기본적인 입력 명령어


3.1.1. 문자 출력 echo

-n

마지막 문자 “\n” 출력 하지 않는다

-e

\(역슬래쉬) 문자 번역

3.1.2. 정형화된 문자 출력 printf

C에서 제공하는 printf 비슷한 기능을 제공

사용법 : printf format [argument]

#!/bin/bash

com=”computer”

printf “$com\n” à computer

printf “%s” $com à computer

printf “%s\t” com à com

printf “%s\n” “computer” à computer

printf “%s\n” “$com” à computer

 

3.2. 기본적인 출력 명령어


3.2.1. 사용자로부터 값을 입력 받는 read

사용법 : read [-t timeout] [-p prompt] [-a array] [-n nchars] [-d delim] 변수명

-t

사용자로부터 입력 받을 시간을 설정하여 입력한 시간을 초과하면 자동으로 넘어간다.

-p

입력 프롬프트의 형태를 지정하며 문자열을 이용하여 출력

-a

입력 받은 변수가 배열임을 정의

-n

입력 받을 값의 크기 설정(문자의 개수)

-d

지정한 문자열을 입력 때까지 입력 받음

-r

입력한 이스케이프 문자를 인식

-s

사용자로부터 입력 받은 문자를 프롬프트에 echo 하지 않기 때문에 주로 패스워드 입력에 이용. 같은 명령어로 “sty –echo” 프롬프트 echo 기능을 정지 하며 “sty echo” 프롬프트 기능을 활성화 한다.

ex) #read –p “Input name : “ –t 10 –n 5 read_value

 

주의 : 변수를 대입 변수 = 같은 형태로 사이에 스페이스를 넣게 되면 대입연산이 아니라 비교 연산이 된다.

4. 기본적인 스크립트

4.1 스크립트의 실행

 만들어진 쉘을 실행하는데 sh 명령어를 이용하거나 또는 스크립트 파일의 실행권한을 활성화 하여 일반 실행 파일처럼 사용하면 된다.

 

4.2. 스크립트의 구분 인자

  스크립트는 명령어와 명령어의 옵션 매개변수로 구분되며 명령어와 명령어의 구분인자로는 Enter 또는 ; 이며 명령어의 옵션 매개변수는 tab 또는 하나 이상의 space 구분 있다.

 

4.2.1 IFS인자 구분 매개 변수

 IFS 구분 인자를 저장하고 있는 변수로, 기본적으로 “space, tab, newline”이다. 만일 특정 문자를 구분인자로 설정하기 위해서 IFS 값을 다른 값으로 지정하여 사용 있다.

 

잘 못된 내용이나 의문사항은 kukuta@gmail.com으로 메일 주세요

 

Posted by kukuta

댓글을 달아 주세요

  1. 정광철 2011.04.29 09:48  댓글주소  수정/삭제  댓글쓰기

    퍼갈께요 좋은정보 감사합니다다

  2. rkfosk 2013.02.13 12:13  댓글주소  수정/삭제  댓글쓰기

    쉘 스크립트에 대해 아는게 없는지라 공부중인데 어렵지만 재밌네요 ㅋㅋ 감사합니다 잘보고 가요.

Unix Linux에서는 OS 의해 사용되는 기본적인 변수(시스템 변수) 사용자 정의 변수 나뉠 있다.

일반적으로 시스템 변수는 대문자로, 사용자 변수는 소문자로 표기한다.

1. 시스템 변수

PS1

bash 프롬프트

PS2

쉘의 하위 프롬프트 설정

PS3

select 문에서의 프롬프트

PS4

bash debug 모드에서의 프롬프트

HOME

사용자 홈디렉토리

PATH

실행 파일의 디렉토리 경로 지정

BASH

사용 경로

BASH_VERSION

bash 쉘의 버전

ENV

환경 설정 파일

USER

사용자

USERNAME

사용자 이름

SHELL

지정한 쉘의 경로

MAIL

메일 보관 디렉토리 경로

MAILCHECK

메일 확인 주기

MAILPATH

사용자 메일 경로 설정 변수

UID

사용자 UID

GID

사용자 GID

LOGNAME

현재 로그인한 사용자

LINES

터미널의 출력 라인

HOSTNAME

호스트 이름

HOSTTYPE

현재 시스템의 CPU 타입

HISTFILESIZE

히스토리 파일 크기

HISTSIZE

히스토리 사용 개수

OSTYPE

운영체제의 타입

PWD

현재 디렉토리의 절대 경로

TERM

현재 사용 중인 터미널의 종류

COLUMNS

현재 사용 중인 터미널의 크기(기본 80컬럼)

LS_COLORS

파일 출력 명령어 사용시 파일의 종류에 따라 컬러 사용

IFS

인자 분리 매개 변수

CDPATH

디렉토리 패스 설정변수

SECONDS

bash 시작하여 경과된 시간

EUID

현재 로그인한 사용자의 UID

RANDOM

임의의 정수를 생성하는 변수

IGNOREEOF

입력행에서 EOF문자가 입력되었을 쉘의 종료를 제어

TMOUT

지정한 시간에 프롬프트의 입력이 없다면 로그 아웃

외에도 많은 환경 변수들이 존재한다. 이는 env 명령어를 통해 확인 있다.

2.
특별 내장 변수

$$

현재 실행중인 프로세스의 PID

$?

마지막에 실행한 명령어의 종료값을 반환하며 실행한 명령어의 에러 정상 실행을 파악하기 위해 사용

$!

마지막 자식 프로세스의 PID

$#

프롬프트 상에서 실행한 명령어나 함수에 의해 전달된 매개변수에 전달 인자의 개수

#0

명령어 실행 명령어를 저장하는 변수로 위치 매개변수라고

$1,$2…

명령어에 전달된 전달 인수가 공백을 기준으로 각각 저장하며 위치 매개 변수라고

$*

명령어에 전달된 전달 인수 전체를 하나의 문자열로 표시하며 전체가 따옴표로 처리

$@

전달 인수를 문자열의 목록으로 표시하며 인자에 따옴표로 처리

$_

프롬프트나 쉘에서 마지막에 전달된 명령어나 명령어에 전달된 인수 값을 저장하며 쉘명령어에 의해 설정 플래그


3. 일반 변수
사용자 정의 변수에 대해서는 크게 설명 할 것이 없다. 선언 하거나 대입 연산을 할 때는 변수의 이름만을 사용하고, 변수의 값을 참조 할 때는 변수 앞에 $를 붙여 준다. 또한 변수선언을 할때 공백문자가 들어가면 안된다.

#!/bin/bash
my_name="kukuta"  # my_name = "kukuta" (X)
echo $my_name

 

Posted by kukuta

댓글을 달아 주세요

1. for

for 의 형식

 for 문은 in 다음에 오는 값을 끝까지 대입하여 반복적으로 실행하는 실행 문이다.

for 변수 in ; do

문장

done

for ((초기값;조건식;증감)); do

   문장

done

 

예제 for_ls.sh

#!/bin/bash

for i in $(ls); do

    echo FILE : $i

done

 

예제 for_inc.sh

#!/bin/bash

for ((i=0;i<10;i++)); do

    echo $i

done

 

 

Posted by kukuta

댓글을 달아 주세요

  1. 김일태 2013.03.15 19:33  댓글주소  수정/삭제  댓글쓰기

    오 구글에서 찾았는데 이게 나왔어 ㅋㅋ

  2. 박상국 2015.05.29 13:26  댓글주소  수정/삭제  댓글쓰기

    나도 ㅋㅋㅋ

  3. 김숭어 2015.09.01 22:24  댓글주소  수정/삭제  댓글쓰기

    이글은 1년에 몇번씩은 꼭 찾네 ; 에궁

  4. aaa 2016.08.11 11:03  댓글주소  수정/삭제  댓글쓰기

    aaaaa

 일반적으로 UNIX/Linux 환경에서 간단한 일들을 처리 하기 위해 쉘 스크립트를 많이 사용하게 된다. 하지만 C++같은 문법에만 익숙해져 있는 사람들은 아무래도 쉘 스크립트를 사용하는데 어색함이 없지 않아 있다.  하지만 PHP의 경우에는 C와 문법이 거의 유사하므로 작성하는데 어색함이 그리 크게 느껴지지 않는다.
 
이 문서는 PHP를 쉘 스크립트로 이용 할 수 있는 방법에 대해서 간단히 기술 하도록 하겠다.

1. php를 쉘 스크립트로 사용하기 위한 요구 사항
php를 쉘 언어로 사용하기 위해서는 아파치 모듈 대신 CGI 바이너리로 설치 해야 한다.

2. #!/usr/local/bin/php -q 선언
일반적인 PHP 페이지와 PHP 쉘 스크립트 사이의 단 한가지 차이점은 PHP스크립트의 제일 첫 번째 줄에 위의 제목과 같이 쉘 호출을 해주어야 하는 점이다. 첫 번째 줄의 '#!'은 주석을 나타냄과 동시에 이 쉘 스크립트가 실행 되면서 이용하게 되는 바이너리 엔진의 위치와 옵션을 타나낸다. (사용하게 될 바이너리의 위치는 사용자의 환경에 따라 다르니 자신의 php 엔진이 어느 디렉토리에 있는지 확인 하도록 한다. 'whereis' 같은 명령어가 도움이 될 것이다.)

-q 옵션은 HTTP헤더를 사용하지 않겠다는 뜻이며 나머지 보다 자세한 사항은 php 도움말을 참조 하도록 한다.
그 외의 부분은 일반적인 php 파일을 작성하는 것과 전혀 다르지 않다.

#!/usr/local/bin/php -q
<?php
   .....
?>

3. 쉘 스크립트에 매개변수 전달하기
일반적으로 쉘 스크립트는 프로세스를 실행 시키면서 매개변수를 전달하는 경우가 많다. php 스크립트에서 매개변수를 전달하는 것은 $argv 배열을 통해서 이루어 진다. $argv 배열을 사용하기 위해서는 php.ini의 register_argc_argv , register_globals 항목들을 On으로 셋팅 해주어야 한다.

register_argc_argv = On
register_globals = On

 아래 스크립트 예제는 프로세스 시작시 인자로 받은 두 변수를 출력 할 것이다.

#!/usr/local/bin/php -q
<?php
    $first_name = $argv[1];
    $last_name = $argv[2];
    print("Hello, $first_name $last_name! How are you today?n");
?>

4. 프로그램 실행 하기 

$ phpShellTest.ph arg1 arg2

결과는 알아서 확인 하도록 하자.

Ref
 http://blog.naver.com/leons78/130006617748

'도구의발견' 카테고리의 다른 글

putty 한글 사용하기  (0) 2008.02.20
CppUnit Cookbook  (0) 2008.01.28
PHP - 쉘 스크립트로 활용 하기  (5) 2007.11.03
vim 문자열 검색 및 치환  (2) 2007.10.25
서비스 포트 변경  (0) 2007.05.09
gcc 라이브러리 만들기와 사용  (0) 2007.04.24
Posted by kukuta

댓글을 달아 주세요

  1. Favicon of http://www.xinublog.com BlogIcon Andrew 2008.06.04 00:43  댓글주소  수정/삭제  댓글쓰기

    관련해서 참고글 남깁니다. php로 쉘 스크립트를 짠다면 php cli를 이용하겠지요. ^^
    http://kirrie.springnote.com/pages/689575

  2. 안녕하세요 2014.09.04 17:58  댓글주소  수정/삭제  댓글쓰기

    오 에러하나 없앴어요
    감사합니다.
    담아갈게요~~