ASP Procedure

ASP에서는 VBScript와 JavaScript 간 프로시져를 상호 호출 가능함.

 

Procedure

다음과 같은 프로시져 기능이 있을 수 있음.

VBScript Procedure

  <!DOCTYPE html>
  <html>
  <head>
    <%
      sub vbproc( x, y )
        response.write( "x * y = " & x * y )
      end sub
    %>
  </head>
  <body>
    <p>Result : <%call vbproc( 3, 4 )%></p>
  </body>
  </html>

다른 스크립팅 언어로 프로시져 / 함수를 작성하려면 <html> 태그 위에 <%@ language="{사용할 언어}" %>를 넣어주면 됨.

js procedure

  <%@ language="javascript" %>
  <!DOCTYPE html>
  <html>
  <head>
    <%
      function jsproc( x, y ) {
        Response.Write( "x * y = " + x * y );
      }
    %>
  </head>
  <body>
    <p>Result : <% jsproc( 3, 4 ); %></p>
  </body>
  </html>

 


VBScript와 JS의 차이점

VBScript로 작성된 ASP 파일에서 VBScript 또는 JS 프로시져를 호출할 때 프로시져 이름 뒤에 call 키워드를 사용할 수 있음.
프로시져에 매개변수가 필요한 경우 call 키워드를 사용할 때 매개변수 목록을 괄호로 묶어야 함. call 키워드를 생략하는 경우 매개변수 목록을 괄호로 묶지 않아야 함.
프로시져에 매개변수가 없으면 괄호는 선택사항임.

JS로 작성된 ASP 파일에서 JS 또는 VBScript 프로시져를 호출할 때 항상 프로시져 이름 뒤에 괄호를 사용해야 함.

 


VBScript Procedure

VBScript에는 두가지 종류의 프로시져가 있음.

  • Sub Procedure
  • Function Procedure

VBScript Sub Procedure

  • sub, end sub 으로 묶인 일련의 문장임.
  • 작업을 하지만 값을 반환하지 않음.
  • 인수를 취할 수 있음.
  sub mysub() 
    some statements
  end sub
  sub mysub( arg1, arg2 ) 
    some statements
  end sub
  <!DOCTYPE html>
  <html>
  <body>
    <%
      sub mysub() 
        response.write( "written by a sub procedure.<br/>" )
      end sub

      response.write( "writtten by the script.<br/>" )
      call mysub()
      call mysub
      mysub()
      mysub
    %>
  </body>
  </html>

 

VBScript Function Procedure

  • function, end function으로 묶인 일련의 문장.
  • 작업을 하고 값을 반환함.
  • 이름에 값을 할당하여 값을 반환함.
  • 호출 프로시져에 의새 인수를 취할 수 있음.
  • 인수가 없으면 빈 괄호 ()를 포함 해야함.
  function func()
    some statements
    func = some value
  end function
  function func( arg1, arg2 )
    some statements
    func = some value
  end function

 

프로시져 호출

  <!DOCTYPE html>
  <html>
  <body>
    <%
      ' 인수 a, b를 받아서 그 합을 반환하는 func
      function func( a, b )
        func = a + b
      end function

      response.write( func( 5, 9 ) )
    %>
  </body>
  </html>

 

VBScript를 이용하여 프로시져 호출

ASP에서 javascript 와 VBScript 에서 만든 프로시져를 모두 호출하는 방법

  <!DOCTYPE html>
  <html>
  <head>
    <%
      sub vbproc( x, y )
        response.write( x * y )
      end sub
    %>
    <script language="javascript" runat="server">
      function jsproc( x, y ) {
        Response.Write( x * y );
      }
    </script>
  </head>
  <body>
    <p> call vbproc : <%call vbproc( 3, 4 )%></p>
    <p> call jsproc : <%call jsproc( 3, 4 )%></p>
  </body>
  </html>

 


728x90
반응형

'WEB > ASP' 카테고리의 다른 글

[ASP] 반복문  (0) 2021.08.26
[ASP] 조건문  (0) 2021.08.26
[ASP] 변수  (0) 2021.08.26
[ASP] 문법  (0) 2021.08.25
[ASP] Intro  (0) 2021.08.25

jstl 내장함수

JSTL functions은 JSTL에서 제공하는 각종 함수를 사용해서 문자열이나, 컬렉션들을 처리함.
fn태그는 단독으로 사용할 수 없고 EL 표현식 내에서 사용해야함.
like ${fn:length(...)}

jsp 페이지 시작점에 다음 태그로 선언 해줘야 사용 할 수 있음.

  <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

 


 

boolean contains(String sting, String substring)

string이 substring을 포함하면 return true.

boolean containsIgnoreCase(String string, String substring)

대소문자에 관계없이, string이 substring을 포함하면 return true.

 

  ${fn:contains("helloworld", "world")} // true

  ${fn:containsIgnoreCase("hello world!", "WoRLd")} // true

 


 

boolean startsWith(String string, String prefix)

string이 prefix로 시작하면 return true.

boolean endsWith(String string, String substring)

string이 suffix로 끝나면 return true.

 

  ${fn:startsWith("hello world!", "ld!")} // false

  ${fn:endsWith("hello world!", "ld!")} // true

 


 

String escapeXml(String string)

string에서 XML, HTML의 < >& ' " 문자들을 각각 < > & ' "로 치환하여 리턴.

 

  <c:out value="${fn:escapeXml('<>')}"/> // &lt;&gt;

 


 

int indexOf(String string, String substring)

string에서 substring이 처음으로 나타나는 인덱스 리턴.

 

  ${fn:indexOf("abcdefg", "f")} // 5

 


 

String[] split(String string, String separator)

string 내의 문자열을 separator에 따라 잘라내서 잘려진 문자열들을 배열로 리턴.

String join(String[] strings, String separator)

배열 요소들을 separator를 구분자로 하여 모두 연결해서 리턴.

 

// 예시를 위한 배열 생성
<c:set var="texts" value="${fn:split('Hi My name is waldo', ' ')}"/>
<c:out value="${fn:join(texts, '-')}"/> // Hi-My-name-is-waldo

 


 

int length(Object item)

item이 배열이나 컬렉션이면 요소의 개수를, 문자열이면 문자의 개수를 리턴.

 

<c:set var="texts" value="${fn:split('Hi My name is waldo', ' ')}"/>

${fn:length(texts)} // 5

${fn:length("123456")} // 6

 


 

String replace(String string, String before, String after)

string 내에 있는 before 문자열을 after 문자열로 모두 바꿔서 리턴.

 

${fn:replace("hi hello", "hello", "hi")} // hi hi

// replace 함수는 HTML에서 공백과 줄바꿈을 표현할 때 사용할 수 있다.
${fn:replace("hell            o          o       ~", " ", "&nbsp;")} // hell            o          o       ~

<% pageContext.setAttribute("enter","\n"); %>
${fn:replace(info.text, enter, '<br/>') // 엔터처리

<% pageContext.setAttribute("enter","\n"); %>
${fn:replace(fn:replace(fn:escapeXml(info.content_txt), enter, '<br/>') , ' ', '&nbsp;')} // 엔터와 공백 처리

 


 

String substring(String string, int begin, int end)

string에서 begin 인덱스에서 시작해서 end 인덱스에 끝나는 부분의 문자열을 리턴.

String substringAfter(String string, String substring)

string에서 substring이 나타나는 이후의 부분에 있는 문자열을 리턴.

String substringBefore(String string, String substring)

string에서 substring이 나타나기 이전의 부분에 있는 문자열을 리턴.

 

${fn:substring(text, 3, 19)} // My name is waldo

${fn:substringAfter(text, "Hi ")} // My name is waldo

${fn:substringBefore(text, "waldo")} // Hi My name is

 


 

String toLowerCase(String string)

string을 모두 소문자로 치환.

String toUpperCase(String string)

string을 모두 대문자로 치환.

 

<c:set var="text" value="Hi My name is waldo"/>

${fn:toLowerCase(text)} // hi my name is waldo

${fn:toUpperCase(text)} // HI MY NAME IS WALDO

 


 

String trim(String string)

string 앞뒤의 공백을 모두 제거.

 

<c:set var="text" value="          blank spcae          "/>
${fn:length(text)}  // 31

<c:set var="text" value="${fn:trim(text)}"/>
${fn:length(text)}  // 11
728x90
반응형

[JSP, JSTL] fn function 정리

jstl function (jstl fn) 정리

jsp 파일 최 생단에 다음과 같이 jstl functions를 사용하겠다고 선언 해야 함.

  <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

함수들은 단독으로 사용할 수 없고 EL 표현식과 함께 사용해야 함.

  ${fn:length(list)}
  ${fn:contains(str, str)}

fn:contains(string, substr)

string이 substr을 포함하면 return true

fn:containsIgnoreCase(string, substr)

대소문자 관계없이 string이 substr을 포함하면 return true

fn:startsWith(string, prefix)

string이 prefix로 시작하면 return True

fn:endsWith(string, suffix)

string이 suffix로 끝나면 return True

fn:escapeXml(string)

string에 XML과 HTML에서 < >& ' " 문자들이 있으면, XML엔티티 코드로 바꿔준뒤 문자열 반환

fn:indexOf(string, substr)

string에서 substr이 처음으로 나타나는 인덱스 반환

fn:split(string, separator)

string내의 문자열 separetor에 따라 나눈 배열로 반환

fn:join(array, separator)

array요소들을 separator를 구분자로 하여 연결해서 반환

fn:length(item)

item이 배열이나 컬렉션이면 요소의 개수를 문자열이면 문자의 개수를 반환

fn:replace(string, before, after)

string내에 있는 before 문자열을 after 문자열로 모두 변경해서 반환

fn:substring(string, begin, end)

string에서 begin인덱스에서 시작해서 end인덱스에 끝나는 부분의 문자열 반환

fn:substringAfter(string, substr)

string에서 substr이 나타나는 이후의 문자열 반환

fn:substringBefore(string, substr)

string에서 substr이 나타나는 이전의 문자열 반환

fn:toLowerCase(string)

string을 모두 소문자로 변경 후 리턴

fn:toUpperCase(string)

string을 모두 대문자로 변경 후 리턴

fn:trim(string)

string앞뒤의 공백을 모두 제거한 후 반환

728x90
반응형

쉘 스크립트 - 1

  • 학습 개요
    쉘은 명령어 해석기 이며 스크립트 언어이다.
    일련의 쉘 명령이나 함수의 조합을 프로그램의 제어 구조를 사용하여 쉘 스크립트 파일로 작성해 두면 편리하게 사용할 때가 있다.
    쉘 스크립트의 기본 작성법을 알아보고 변수와 함수의 사용법과 예제를 보자.

  • 학습 목표

    1. 쉘 스크립트 파일의 실행 방법을 알 수 있다.
    2. 쉘 스크립트에서 변수를 사용할 수 있다.
    3. 쉘 스크립트에서 함수를 정의하고 호출하여 사용할 수 있다.

쉘 스크립트 개요

쉘 스크립트

  • 쉘 명령어의 집합으로 이루어진 실행 가능한 텍스트 파일.
    • 쉘이 파일의 내용을 읽어 처리함.
    • 선택 / 반복 등의 프로그래밍 구조를 사용할 수 있음.
    • 긴 작업, 반복적으로 일어나는 작업을 쉘 스크립트로 작성할 수 있음.
    • 쉘 스크립트를 새로운 명령어처럼 사용할 수 있음.
  • 예)
    • ~/.bash_profile, ~/.bachrc 등의 쉘 초기화 스크립트.
    • 디렉토리 /etc/rc.d/init.d/에 존재하는 시스템 초기화 스크립트.
  • 3차 USE_SHELL을 복습 할 것.

쉘 스크립트의 실행 방법

  • bash script_file
    • 스크립트 파일에 실행 권한을 추가할 필요가 없음.
    • 명령 행에서 script_file 다음에 인수를 추가할 수 있음.
    • 서브 쉘을 새로 생성하여 스크립트를 실행함.
  • ./script_file
    • 스크립트 파일에 실행 권한을 추가 해야 함.
    • PATH 환경 변수에 설정된 디렉토리에서 스크립트 파일을 찾음.
    • 스크립트 파일의 첫 행에서 #! 다음에 해석기(/bin/bash)를 지정함.
    • 서브 쉘을 새로 생성하여 스크립트를 실행함.
  • source script_file || / . script_file
    • source는 쉘 내장 명령이며 현재 쉘에서 스크립트 파일을 실행함.

쉘 스크립트 문법

  • #으로 시작하는 단어와 행은 주석으로 처리 됨.
  • $0은 스크립트 파일의 이름으로 확장됨.
    • source 명령으로 실행하는 경우 쉘의 이름(bash)으로 확장 됨.
  • $1은 첫 번째 인수, $2는 두 번째 인수로 확장 됨
  • 스크립트가 복잡하다면 적절한 echo 명령을 넣는 것이 좋음.
  • 변수=값을 사용하여 변수에 값을 지정하고 $변수를 사용하여 값을 추출할 수 있음
    • 등호(=)의 좌우에 공백이 있으면 안됨
  • bash -x script_file과 같이 실행하면 수행되는 명령을 확인할 수 있음.(디버깅 모드)

변수의 사용

쉘스크립트에서 변수의 사용

  • 선언 없이 변수를 사용할 수 있음
    • MYCOLOR=blue || echo $PATH
  • 변수의 값은 기본적으로 문자열로 취급
    • 연산이 필요하고, 변환이 가능한 경우에 정수로 다루어짐
  • 변수 이름의 작명
    • 대소문자 구분
    • 영문자, 숫자, 언더스코어로 구성
    • 첫 자는 숫자가 될 수 없음.

변수 사용의 예

ex desc
a=ls 변수 a에 문자열 'ls'를 대입
b="A string" 따옴표를 사용하여 공백을 가진 문자열을 대입
c="A string and $b" $b를 '변수 확장'한 후 문자열을 대입
d=$(ls wc -l)
e=$[5*7] $[...]는 '수식 확장'을 의미. 대괄호 안의 수식을 계산한 후 결과를 대입
f="\t\tA string\n" 이스케이프 문자 \를 사용
g=5 h="A String" 한 행에 2개의 변수를 사용하는 예
i=${b}1 변수 이름을 중괄호로 묶으면 뒤따라 나오는 문자를 분리할 수 있음. "A string1"이 대입됨. 실제 $b는 ${b}를 줄여 쓴 형태
$a 먼저 변수 확장이 일어나고, 쉘은 이것을 하나의 명령어로 해석하여 처리
$a=$e 변수 확장의 결과는 ls=35. 쉘은 이 자체를 하나의 명령어로 처리하므로 오류가 발생. eval "$a=$e"를 실행할 수 있음

명령 행 인수

  • 쉘이 스크립트를 처리할 때 사용되는 인수
    • 사용자가 스크립트 실행에 필요한 입력값을 주어야 함
  • $0은 스크팁트 파일의 이름으로 확장
  • 나머지를 위치 매개변수(positional parameteer)라 하며 $1, $2, $3 등은 이러한 인수를 의미함
  [ec2-user@ip-aws ~]$ cat > arg.sh
  echo "This script's name is $0"
  echo Argument 1 : $1
  echo Argument 2 : $2
  ^C
  [ec2-user@ip-aws ~]$ ls
  arg.sh  first.sh  list.bak
  [ec2-user@ip-aws ~]$ chmod u+x arg.sh
  [ec2-user@ip-aws ~]$ ./arg.sh first second
  This script's name is ./arg.sh
  Argument 1 : first
  Argument 2 : second
  [ec2-user@ip-aws ~]$ /home/ec2-user/arg.sh one two
  This script's name is /home/ec2-user/arg.sh
  Argument 1 : one
  Argument 2 : two

특별한 매개변수

  • 명령 행 인수와 관계가 있는 특별한 변수
  • 변수의 값을 참조만 할 수 있음
ex desc
$* "$*"는 $0을 제외한 모든 위치 매개변수를 포함하는 1 개의 큰 따옴표 like "$1 $2 $3 ..."
$@ 여러 개별 큰 따옴표 문리된 문자열로 확장 됨. "$1", "$2", "$3", ...
$$ 쉘의 프로세스 ID PID로 확장
$# 위치 매개변수의 개수로 확장
$? 최근에 실행된 포어그라운드 명령의 종료 상탯값으로 확장됨. 성공적 종료는 0.
$! 최근 실행된 백그라운드 명령의 프로세스 ID로 확장됨.

read

  • 키보드로 부터 한 라인을 읽은 후, 단어를 상응하는 변수에 저장함.
    • 대화식으로 스크립트를 실행시킬 수 있음.
  • read [options] [variable...]
    • 첫 번째 변수에 첫 번째 단어를, 두 번째 변수에 두 번째 단어를 저장.
    • 마지막 면수에 나머지 모두를 저장.
    • 남아있는 변수가 있으면 빈 문자열이 됨.
    • 변수의 이름을 사용하지 않으면 쉘 면수 REPLY에 저장됨.
    • 옵션 -p prompt는 입력을 위한 프롬프트를 지정함.

함수의 사용

함수

  • 함수는 쉘 스크립트에서 반복적으로 사용되는 명령의 묶음.
  • 쉘 스크립트 파일에 함수를 정의할 수 있음.
    • 정의되어 있는 함수를 호출하여 사용함.

함수의 호출 방법

  • 함수가 정의된 스크립트 파일에서 함수를 호출하여 사용할 수 있음.
  • 함수가 정의된 스크립트 파일을 실행하면 쉘 환경에 함수 정의가 추가됨.
    -> 같은 쉘에서 함수 이름을 쉘 명령어처럼 사용.
    • source 명령이나 도트(.) 명령으로 쉘 스크립트를 실행하면 함수 정의가 현재 쉘 환경에 추가됨.
      • set 명령으로 확인하고 unset name으로 삭제할 수 있음.
    • 이후 함수를 쉘 명령어처럼 사용할 수 있음.

함수 정의 방법

  function name {
    command ...
    return
  }

  name() {
    command ...
    return
  }
  • return [n] 문은 함수를 종료하는 문장으로 종료 상탯값을 리턴할 수 있음(n이 생량되면 직전 명령의 종료 상탯값을 리턴)
  • 함수 정의를 항상 사용하려면 .bashrc에 넣는것이 좋음
    • alias 설정도 마찬가지.

함수 실행 예

  [ec2-user@ip-aws ~]$ touch whoson.sh
  [ec2-user@ip-aws ~]$ vi whoson.sh
  [ec2-user@ip-aws ~]$ cat whoson.sh
  #!/bin/bash

  whoson () {
    date
    user=$USER
    echo "$user currently logged on"
  }

  echo "STEP 1"
  whoson
  echo "STEP 3"

  [ec2-user@ip-aws ~]$ . whoson.sh
  STEP 1
  Thu Nov  5 12:50:41 UTC 2020
  ec2-user currently logged on
  STEP 3

  [ec2-user@ip-aws ~]$

  [ec2-user@ip-aws ~]$ . whoson.sh
  STEP 1
  Thu Nov  5 12:50:59 UTC 2020
  ec2-user currently logged on
  STEP 3

  [ec2-user@ip-aws ~]$ whoson
  Thu Nov  5 12:51:19 UTC 2020
  ec2-user currently logged on

  [ec2-user@ip-aws ~]$ echo $user
  ec2-user
[ec2-user@ip-aws ~]$ cat .bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
  . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions

[ec2-user@ip-aws ~]$ vi ~/.bashrc

[ec2-user@ip-aws ~]$ cat .bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
  . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions
arg1 () {
  echo "$1"
}

ds() {
  echo "DISK DPACE UTILIZATION FOR $USER"
  du -sh ~
}

[ec2-user@ip-aws ~]$ . ~/.bashrc

[ec2-user@ip-aws ~]$ arg1 first
first

[ec2-user@ip-aws ~]$ ds
DISK DPACE UTILIZATION FOR ec2-user
80K     /home/ec2-user
728x90
반응형

+ Recent posts