Jacl로 wsadmin 스크립팅 사용(더 이상 사용되지 않음)
Jacl은 TCL의 대체 구현이며, 완전히 Java™ 코드로 작성됩니다.
wsadmin 도구는 Jacl V1.3.2를 사용합니다.
wsadmin 도구에서의 Jacl 구문 안정화
버전 7의 제품에서는 Jacl 언어가 안정화되었습니다. IBM®은 현재 제품의 후속 릴리스에서 이 기능을 사용하지 않거나 제거할 계획이 없습니다. 그러나 향후에는 전략적 대안으로 Jython 언어에 중점적으로 투자할 것입니다. 사용자는 Jacl이 사용되는 기존 애플리케이션 및 스크립트를 변경할 필요가 없습니다. 그러나 새 애플리케이션의 경우 전략적 대안 언어 사용을 고려해 보십시오.
- 관리 콘솔 명령 지원 - 관리 콘솔의 기능으로 콘솔과 상호작용하는 사용자가 취한 조치와 동일한 wsadmin 명령을 표시합니다. 콘솔 명령 지원 기능에서 출력된 것은 WebSphere Application Server Tool로 직접 전송되어 관리 콘솔 조치를 기반으로 하는 Jython 스크립트 개발을 간단하게 합니다. 또한 일반 텍스트 파일에서 콘솔 명령 지원 기능을 사용해서 출력 결과를 저장하여 나중에 사용할 수 있습니다.
- Jacl-to-Jython 변환 유틸리티 - Jacl 구문 wsadmin 스크립트를 동일한 Jython 구문 wsadmin 스크립트로 변환하는 프로그램입니다. 수십개의 새로운 상위 레벨 명령은 단순한 매개변수 및 간단한 기본 로직을 사용하여 기본 간리 모델의 스크립트를 분리합니다.
기본 구문
Jacl 명령의 기본 구문은 다음과 같습니다.
Command arg1 arg2 arg3 ...
command는 내장 명령 또는 Jacl 프로시저의 이름입니다. 예를 들면, 다음과 같습니다.
puts stdout {Hello, world!}
=> Hello, world!
이 예에서, 명령은 puts이며, I/O 스트림 ID와 문자열의 두 인수를 취합니다. puts는 I/O 스트림에 문자열을 기록하는데, 문자열 뒤에는 줄 바꾸기 문자가 추가됩니다. 인수는 명령으로 해석됩니다. 이 예에서, stdout가 표준 출력 스트림을 식별하는 데 사용됩니다. puts 및 기타 I/O 명령에서는 이름으로 stdout를 사용하는 규칙을 채택합니다. stderr은 표준 오류 출력을 식별하고 stdin은 표준 입력을 식별합니다.
변수
set 명령은 변수에 값을 지정합니다. 이 명령은 변수 이름 및 값의 두 인수를 사용합니다. 변수 이름으로 모든 길이를 사용할 수 있으며 대소문자가 구분됩니다. Jacl 변수를 사용하기 전에 선언할 필요는 없습니다. 변수에 값이 지정되면 해석기가 변수를 작성합니다. 예를 들면, 다음과 같습니다.
set a 5
=> 5
set b $a
=> 5
두 번째 예는 a 변수 값을 변수 b에 지정합니다. 달러 표시($) 사용은 변수의 대체를 나타냅니다. unset 명령으로 변수를 삭제할 수 있습니다. 예를 들면, 다음과 같습니다.
unset varName1 varName2 ...
unset 명령에 원하는 수의 변수를 전달할 수 있습니다. 변수가 이미 정의되지 않은 경우, unset 명령은 오류를 표시합니다. unset 명령으로 전체 배열을 삭제하거나 단일 배열 요소만 삭제할 수도 있습니다. 배열에서 unset 명령을 사용하면 큰 데이터 구조를 쉽게 제거할 수 있습니다. 변수의 존재 여부는 info exists 명령으로 테스트할 수 있습니다. incr 매개변수를 사용하려면 변수가 먼저 존재해야 하므로 변수의 존재 여부를 테스트해야 합니다. 예를 들면, 다음과 같습니다.
if ![info exists my_info] {set my_info 0} else {incr my_info}
명령 대체
대체의 두 번째 양식은 명령 대체입니다. 중첩 명령은 대괄호 [ ]로 구분됩니다. Jacl 해석기는 대괄호 안의 모든 요소를 평가하여 명령으로 간주합니다. 예를 들어, 다음과 같습니다.
set len [string length my_string]
=> 6
이 예에서, 중첩 명령은 다음과 같습니다. string length my_string. string 명령은 문자열에 대해 여러 조작을 수행합니다. 이 경우, 명령은 my_string 문자열의 길이를 요구합니다. 단일 명령 내에 여러 명령 대체가 있는 경우, 해석기는 왼쪽부터 오른쪽 대괄호 순으로 처리합니다. 예를 들면, 다음과 같습니다.
set number "1 2 3 4"
=> 1 2 3 4
set one [lindex $number 0]
=> 1
set end [lindex $number end]
=> 4
set another {123 456 789}
=> 123 456 789
set stringLen [string length [lindex $another 1]]
=> 3
set listLen [llength [lindex $another 1]
=> 1
수학 표현식
Jacl 해석기는 수학 표현식을 평가하지 않습니다. expr 명령을 사용하여 수학 표현식을 평가하십시오. expr 명령 구현은 모든 인수를 사용하고 이 인수를 단일 문자열로 연결하며, 문자열을 수학 표현식으로 구문 분석합니다. expr 명령이 응답을 계산한 후에는 문자열로 형식화되어 리턴됩니다. 예를 들어, 다음과 같습니다.
expr 7.2 / 3
=> 2.4
백슬래시 대체
Jacl 해석기가 수행하는 마지막 대체 유형은 백슬래시 대체입니다. 해석기에 특별한 의미를 부여하는 인용 문자를 추가하려면 백슬래시를 사용하십시오. 예를 들어, 리터럴 달러 기호, 중괄호 또는 대괄호를 백슬래시로 인용하여 지정할 수 있습니다. 백슬래시를 많이 사용하는 경우, 대신 중괄호로 그룹화하여 특수 문자를 해석하지 않도록 할 수 있습니다. 백슬래시가 필요한 경우가 있습니다. 예를 들어, 다음과 같습니다.
set dollar "This is a string \$contain dollar char"
=> This is a string $contain dollar char
set x $dollar
=> This is a string $contain dollar char
set group {$ {} [] { [ } ]}
=> $ {} [] { [ } ]
또한 백슬래시를 사용하여 긴 명령을 여러 행으로 나눌 수 있습니다. 백슬래시가 없는 새 행이 명령을 종료합니다. 행의 마지막 문자인 백슬래시는 공백으로 변환됩니다. 예를 들어, 다음과 같습니다.
set totalLength [expr [string length "first string"] + \
[string length "second string"]]
=> 25
중괄호 또는 큰따옴표로 그룹화
큰따옴표 또는 중괄호를 사용하여 단어를 그룹화할 수 있습니다. 따옴표는 그룹에서 대체를 사용 가능하게 하고 중괄호는 대체를 금지합니다. 이 규칙은 명령, 변수 및 백슬래시 대체에 적용됩니다. 예를 들어, 다음과 같습니다.
set s Hello
=> Hello
puts stdout "The length of $s is [string length $s]."
=> The length of Hello is 5.
puts stdout {The length of $s is [string length $s].}
=> The length of $s is [string length $s].
두 번째 예에서, Jacl 해석기는 puts 명령의 두 번째 인수에서 변수 및 명령 대체를 수행합니다. 세 번째 명령에서는 대체가 금지되므로 문자열이 있는 그대로 인쇄됩니다.
Jacl 언어가 백슬래시 문자(\)를
일탈 문자로 사용하기 때문에 경로 설명에 특별히 주의해야 합니다. 이를 수정하려면,
각 백슬래시를 슬래시로 바꾸거나 분배 경로문에서 두 개의 백슬래시를 사용하십시오. 예제: C:/ 또는 C:\\
프로시저 및 범위
Jacl은 proc 명령을 사용하여 프로시저를 정의하십시오. 프로시저를 정의하는 기본 구문은 다음과 같습니다.
proc name arglist body
첫 번째 인수는 정의된 프로시저의 이름입니다. 이름은 대소문자가 구분되며 모든 문자가 포함될 수 있습니다. 프로시저 이름과 변수 이름은 서로 충돌하지 않습니다. 두 번째 인수는 프로시저에 대한 매개변수 목록입니다. 세 번째 인수는 명령입니다. 더 일반적으로 표현하면, 프로시저 본문을 구성하는 명령 그룹입니다. JACL 프로시저가 정의되면 내장 명령과 같이 사용됩니다. 예를 들어, 다음과 같습니다.
proc divide {x y} {
set result [expr $x/$y]
puts $result
}
스크립트 내부에서 이는 divide 프로시저를 호출하는 방법입니다.
divide 20 5
또한 다음과 같은 결과를 가져다 줍니다.
4
이 예에서, 변수 c의 사용은 필요하지 않습니다. 또한 프로시저 본문을 다음과 같이 작성할 수도 있습니다.
return [expr sqrt($a * $a + $b * $b)]
이 예에서, Jacl 해석기가 본문의 마지막 명령 값을 프로시저의 값으로 리턴하기 때문에 return 명령은 선택적입니다. 따라서, 프로시저 본문을 다음과 같이 줄일 수도 있습니다.
expr sqrt($a * $a + $b * $b)
프로시저의 결과는 본문의 마지막 명령이 리턴한 결과입니다. return 명령을 사용하여 특정 값을 리턴할 수 있습니다.
프로시저 이름에 대한 단일 글로벌 범위가 있습니다. 다른 프로시저 내에 프로시저를 정의할 수 있지만, 어느 위치에서나 가시적입니다. 변수와 프로시저의 네임스페이스가 서로 다르므로 동일한 이름의 프로시저 및 변수를 충돌 없이 사용할 수 있습니다. 각 프로시저의 변수는 로컬 범위를 갖습니다. 프로시저에 도입된 변수는 프로시저 호출의 지속 시간 동안만 존재합니다. 프로시저가 리턴된 후에는 이러한 변수가 정의되지 않습니다. 동일한 변수 이름이 외부 범위에 있는 경우, 프로시저 내에서 해당 변수 이름을 사용해도 아무런 영향을 미치지 않습니다. 글로벌 범위 명령을 사용하지 않으면 프로시저가 프로시저 외부에 정의된 변수를 볼 수 없습니다.
글로벌 범위는 최상위 레벨 범위입니다. 이 범위는 프로시저의 외부입니다. global 명령을 사용하여 글로벌 범위에서 정의된 변수가 프로시저 내의 명령에 액세스할 수 있도록 해야 합니다. global 명령의 구문은 다음과 같습니다.
global varName1 varName2 ...
주석
주석을 작성하려면 파운드 문자(#)를 사용하십시오.
명령행 인수
Jacl 쉘은 명령행 인수를 argv 변수의 값으로 스크립트에 전달합니다. 명령행 인수 수는 argc 변수에 의해 제공됩니다. 프로그램 또는 스크립트의 이름은 argv의 일부가 아니거나 argc에 의해 계산되지 않습니다. argv 변수는 목록입니다. lindex 명령을 사용하여 인수 목록에서 항목을 추출하십시오. 예를 들면, 다음과 같습니다.
set first [lindex $argv 0]
set second [lindex $argv 1]
문자열 및 패턴 일치
문자열은 Jacl 언어의 기본 데이터 항목입니다. 여러 명령을 사용하여 문자열을 조작할 수 있습니다. string 명령의 일반 구문은 다음과 같습니다.
string operation stringvalue otherargs
operation 인수는 문자열의 조치를 판별합니다. 두 번째 인수는 문자열 값입니다. 조작에 따라 추가 인수가 있을 수 있습니다.
다음 표에는 string 명령의 요약이 포함됩니다.
명령 | 설명 |
---|---|
string compare str1 str2 | 문자열을 사전 편집 측면에서 비교합니다. 동일한 경우 0을 리턴하고, str1 정렬이 str2에 선행하면 -1, 그렇지 않으면 1을 리턴합니다. |
string first str1 str2 | str1 첫 번째 발생의 str2에 있는 색인을 리턴하거나, str1을 찾을 수 없는 경우 -1을 리턴합니다. |
string index string1 index1 | 지정된 색인에서 문자를 리턴합니다. |
string last str1 str2 | str1 마지막 발생의 str2에 있는 색인을 리턴하거나, str1을 찾을 수 없는 경우 -1을 리턴합니다. |
string length string | 문자열에서 문자 수를 리턴합니다. |
string match pattern str | str이 pattern과 일치하면 1을 리턴하고, 그렇지 않으면, 0을 리턴합니다. |
string range str i j | str i부터 j까지의 문자 범위를 리턴합니다. |
string tolower string | 문자열을 소문자로 리턴합니다. |
string toupper string | 문자열을 대문자로 리턴합니다. |
string trim string ?chars? | 문자열의 양끝에서 chars의 문자를 잘라냅니다. chars는 기본으로 공백으로 지정됩니다. |
string trimleft string ?chars? | 문자열 시작 부분에서 chars의 문자를 잘라냅니다. chars는 기본으로 공백으로 지정됩니다. |
string trimright string ?chars? | 문자열 끝에서 chars의 문자를 잘라냅니다. chars는 기본으로 공백으로 지정됩니다. |
string wordend str ix | 색인 ix 위치의 문자를 포함하는 단어 뒤에 있는 문자의 str에 있는 색인을 리턴합니다. |
string wordstart str ix | 색인 ix 위치의 문자를 포함하는 단어에서 첫 번째 문자의 str에 있는 색인을 리턴합니다. |
append 명령
append 명령의 첫 번째 인수는 변수 이름입니다. 이 명령은 이름 지정된 변수의 현재 값에 나머지 인수를 연결합니다. 예를 들어, 다음과 같습니다.
set my_item z
=> z
append my_item a b c
=> zabc
regexp 명령
regexp 명령은 일반 표현식 일치 프로그램에 대한 직접 액세스를 제공합니다. 구문은 다음과 같습니다.
regexp ?flags? pattern string ?match sub1 sub2 ...?
문자열의 일부가 패턴과 일치하는 경우, 리턴값은 1입니다. 그렇지 않으면, 리턴값은 0입니다. 패턴이 전체 문자열과 일치하지 않아도 됩니다. 더 제어해야 하는 경우, 패턴을 ^로 시작하여 패턴을 문자열 시작 부분에 고정시키거나 패턴을 달러 기호 $로 종료하여 문자열 끝에 고정시킬 수 있습니다. 두 문자를 사용하여 패턴이 전체 문자열과 일치되도록 할 수 있습니다. 예를 들어, 다음과 같습니다.
set text1 "This is the first string"
=> This is the first string
regexp "first string" $text1
=> 1
regexp "second string" $text1
=> 0
Jacl 데이터 구조
Jacl 언어의 기본 데이터 구조는 문자열입니다. 다음 두 가지 상위 레벨의 데이터 구조가 있습니다. 목록 및 배열. 목록은 문자열로 구현되며 구조는 문자열 구문으로 정의됩니다. 구문 규칙은 명령 구문 규칙과 동일합니다. 명령은 목록의 특정 인스턴스입니다. 배열은 색인을 포함하는 변수입니다. 색인은 문자열 값이므로 배열을 한 문자열(색인)에서 다른 문자열(배열 요소 값)로의 맵핑으로 간주할 수 있습니다.
Jacl 목록
Jacl 언어의 목록은 특별하게 해석되는 문자열입니다. Jacl 언어에서 목록의 구조는 명령 구조와 동일합니다. 목록은 공백으로 분리되는 목록 요소로 구성되는 문자열입니다. 중괄호 또는 따옴표를 사용하여 공백이 포함된 단어를 단일 목록 요소로 그룹화할 수 있습니다.
다음 표는 목록과 관련된 명령을 포함합니다.
명령 | 설명 |
---|---|
list arg1 arg2 | 모든 인수로 목록을 작성합니다. |
lindex list i | 목록에서 i번째 요소를 리턴합니다. |
llength list | 목록에서 요소 수를 리턴합니다. |
lrange list i j | 목록에서 i'부터 j'번째까지의 요소를 리턴합니다. |
lappend listVar arg arg ... | listVar 값에 요소를 추가합니다. |
linsert list index arg arg ... | 목록에서 위치 인덱스의 요소 앞에 요소를 삽입합니다. 새 목록을 리턴합니다. |
lreplace list i j arg arg ... | 목록에서 i - j 요소를 arg로 바꿉니다. 새 목록을 리턴합니다. |
lsearch mode list value | 목록에서 모드에 따라 값과 일치하는 요소의 색인을 리턴합니다. 모드는 -exact, -glob 또는 -regexp이며, -glob가 기본값입니다. 찾을 수 없는 경우, -1을 리턴합니다. |
lsort switches list | 다음 스위치에 따라 목록 요소를 정렬합니다. -ascii, -integer, -real, -increasing, -decreasing, -command 명령. 새 목록을 리턴합니다. |
concat arg arg arg ... | 여러 목록을 하나의 목록으로 결합합니다. |
join list joinString | 목록 요소를 joinString으로 분리하여 병합합니다. |
split string splitChars | splitChars의 문자를 목록 요소 간의 경계로 사용하여 문자열을 목록 요소로 분할합니다. |
배열
set arr(index) value
달러 기호($)를 대신 사용하여 배열 요소 값을 얻을 수 있습니다. 예를 들면, 다음과 같습니다.
set my_item $arr(index)
예를 들어, 다음과 같습니다.
set fruit(best) kiwi
=> kiwi
set fruit(worst) peach
=> peach
set fruit(ok) banana
=> banana
array get fruit
=> ok banana worst peach best kiwi
array exists fruit
=> 1
다음 표에는 배열 명령을 포함합니다.
명령 | 설명 |
---|---|
array exists arr | arr이 배열 변수이면 1을 리턴합니다. |
array get arr | 색인과 해당 배열 값 간에 대체되는 목록을 리턴합니다. |
array names arr ?pattern? | arr에 대해 정의된 모든 색인 목록 또는 문자열 일치 패턴과 일치하는 색인 목록을 리턴합니다. |
array set arr list | get에 의해 리턴된 목록 양식과 동일해야 하는 목록에서 배열 arr을 초기화합니다. |
array size arr | arr에 대해 정의된 색인 수를 리턴합니다. |
array startsearch arr | arr 전체에서 검색에 대한 검색 토큰을 리턴합니다. |
array nextelement arr id | 검색에서 토큰 ID로 식별되는 배열의 다음 요소 값을 리턴합니다. 검색에 더 이상 요소가 없으면 빈 문자열을 리턴합니다. |
array anymore arr id | 검색에 요소가 더 남아 있으면 1을 리턴합니다. |
array donesearch arr id | id로 식별된 검색을 종료합니다. |
제어 플로우 명령
다음과 같은 루프 명령이 존재합니다.
- while
- foreach
- for
조건부 명령은 다음과 같습니다.
- if
- switch
다음은 오류 처리 명령입니다.
- catch
다음 명령은 제어 플로우를 세부 조정합니다.
- break
- continue
- return
- error
if then else
if 명령은 기본 조건부 명령입니다. 표현식이 true이면 코드의 두 번째 행을 실행하고 그렇지 않은 경우에는 다른 코드 행을 실행하라는 명령입니다. 두 번째 명령 본문(else절)은 선택적입니다. 명령 구문은 다음과 같습니다.
if boolean then body1 else body2
then 및 else 키워드는 선택사항입니다. 예를 들어, 다음과 같습니다.
if {$x == 0} {
puts stderr "Divide by zero!"
} else {
set slope [expr $y/$x]
}
switch
표현식의 값에 따라 여러 명령 중 하나로 분기하려면 switch 명령을 사용하십시오. 단순 비교 및 패턴 일치에 기초하도록 선택할 수 있습니다. 패턴 본문 쌍을 원하는 수만큼 지정할 수 있습니다. 여러 패턴이 일치하는 경우, 첫 번째 일치하는 패턴의 코드 본문만 평가됩니다. 명령의 일반 양식은 다음과 같습니다.
switch flags value pat1 body1 pat2 body2 ...
모든 패턴 본문 쌍을 하나의 인수로 그룹화할 수도 있습니다.
switch flags value {pat1 body1 pat2 body2 ...}
값의 일치 방법을 결정하는 네 개의 플래그가 있습니다.
- -exact 값을 패턴 중 하나에 정확히 일치시킵니다.
- -glob glob 스타일의 패턴 일치를 사용합니다.
- -regexp 일반 표현식 패턴 일치를 사용합니다.
- -- 플래그가 없음(또는 플래그 끝). 값이 대시(-)로 시작하는 경우에 유용합니다.
예를 들어, 다음과 같습니다.
switch -exact -- $value {
foo {doFoo; incr count(foo)}
bar {doBar; return $count(foo)}
default {incr count(other)}
}
마지막 본문과 연관된 패턴이 default일 경우, 다른 패턴 일치가 없으면 명령 분문이 시작됩니다. default 키워드는 마지막 패턴 본문 쌍에서만 유효합니다. 앞의 본문에서 기본 패턴을 사용하는 경우, 이를 패턴으로 간주하여 리터럴 문자열 기본값을 일치시킵니다.
foreach
foreach 명령은 명령 본문에서 루프되고 루프 변수를 목록의 각 값에 지정합니다. 구문은 다음과 같습니다.
foreach loopVar valueList commandBody
첫 번째 인수는 변수 이름입니다. 명령 본문은 목록의 연속 값을 갖는 루프 변수를 사용하여 루프의 각 요소에 대해 한 번 실행됩니다. 예를 들어, 다음과 같습니다.
set numbers {1 3 5 7 11 13}
foreach num $numbers {
puts $num
}
환경에 서버가 하나만 있는 경우, 앞의 예에 대한 결과는 다음 출력과 같습니다. 둘 이상의 서버가 있으면, 모든 서버에 대한 정보가 리턴됩니다.
1
3 5711
13
while
while 명령은 두 개의 인수인 테스트와 명령 본문을 사용합니다. 예를 들어, 다음과 같습니다.
while booleanExpr body
while 명령은 부울 표현식을 반복 테스트하여 표현식이 참이면(0이 아닌 경우) 본문을 실행합니다. 예를 들어, 다음과 같습니다.
set i 0
while {$i < 5} {
puts "i is $i"
incr i}
서버가 하나만 있는 경우, 앞의 예에 대한 결과는 다음 출력과 유사합니다. 둘 이상의 서버가 있으면, 모든 서버를 인쇄합니다.
i is 0
i is 1
i is 2
i is 3
i is 4
for
for 명령은 C 언어 명령문과 유사합니다. 이 명령은 네 개의 인수를 사용합니다. 예를 들면, 다음과 같습니다.
for initial test final body
첫 번째 인수는 루프를 초기화하는 명령입니다. 두 번째 인수는 루프 본문의 실행 여부를 결정하는 부울 표현식입니다. 세 번째 인수는 루프 본문 다음에 실행되는 명령입니다. 예를 들면, 다음과 같습니다.
set numbers {1 3 5 7 11 13}
for {set i 0} {$i < [llength $numbers]} {incr i 1} {
puts "i is $i"
}
환경에 서버가 하나만 있는 경우, 앞의 예에 대한 결과는 다음 출력과 같습니다. 둘 이상의 서버가 있으면, 모든 서버 이름을 인쇄합니다.
i is 1
i is 3
i is 5
i is 7
i is 11
i is 13
break 및 continue
break 및 continue 명령으로 루프 실행을 제어할 수 있습니다. break 명령은 루프에서 즉시 나가도록 합니다. continue 명령은 루프가 다음 반복으로 계속 진행되도록 합니다.
catch
올바르지 않은 수의 인수로 명령을 호출하거나 명령이 구현에 특정한 일부 오류 조건을 발견하면, 오류가 발생합니다. 오류를 발견하지 못하면 스크립트가 실행되지 않습니다. catch 명령을 사용하여 이러한 오류를 트랩하십시오. catch 명령은 두 개의 인수를 사용합니다. 예를 들면, 다음과 같습니다.
catch command ?resultVar?
첫 번째 인수는 명령 본문입니다. 두 번째 인수는 명령이 오류를 발생시킬 경우 오류 메시지 또는 명령 결과를 포함하는 변수의 이름입니다. catch 명령은 오류가 발견되지 않으면 값 0을 리턴하고 오류를 발견하면 값 1을 리턴합니다. 예를 들어, 다음과 같습니다.
catch {expr 20 / 5} result
==> 0
puts $result
==> 4
catch {expr text / 5} result
==> 1
puts $result
==> syntax error in expression "text / 5"
return
프로시저 본문이 끝나기 전에 값을 리턴하거나 대조 값을 리턴해야 할 경우 return 명령을 사용하십시오.
네임스페이스
Jacl은 네임스페이스에서 변수와 같은 이름 지정된 엔티티를 추적합니다. 또한 wsadmin 도구는 AdminApp 오브젝트와 같은 스크립트 오브젝트의 글로벌 네임 스페이스에 항목을 추가합니다.
proc 명령을 실행하면, proc 명령에 있는 이름 및 매개변수 값으로 로컬 네임스페이스가 작성되고 초기화됩니다. 변수는 proc 명령을 실행하는 동안 로컬 네임스페이스에 보유됩니다. proc 명령을 중지시키면, 로컬 네임스페이스가 지워집니다. proc 명령의 로컬 네임스페이스는 C 및 Java와 같은 언어에서 자동 변수의 시맨틱을 구현합니다.
글로벌 네임스페이스의 변수는 최상위 레벨 코드에 가시적이지만, 기본적으로 proc 명령 내에서는 가시적이 아닙니다. 변수를 가시적으로 만들려면 global 명령을 사용하여 변수를 글로벌로 선언하십시오. global 명령은 제공하는 변수 이름에 대해 로컬 네임스페이스에서 실제로 변수를 정의하는 글로벌 네임스페이스 항목을 가리키는 항목을 작성합니다.
proc에서 wsadmin 도구가 제공하는 스크립트 오브젝트를 사용하는 경우, 해당 오브젝트를 사용하기 전에 글로벌하게 선언해야 합니다. 예를 들면,
proc { ... } {
global AdminConfig
... [$AdminConfig ...]
}
다른 스크립트를 사용하여 스크립트 호출
source 명령을 사용하여 다른 Jacl 스크립트에서 Jacl 스크립트를 호출합니다. 예를 들면, 다음과 같습니다.
스크립트 test1.jacl 을 작성하십시오.
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
source c:/temp/script/testProcedure.jacl
printName Cathy Smith
![[z/OS]](../images/ngzos.gif)
source /temp/script/testProcedure.jacl
printName Cathy Smith
testProcedure.jacl이라는 스크립트를 작성하십시오.
proc printName {first last} {
puts "My name is $first $last"
}
스크립트 인수를 사용하여 다음 경로를 전달하십시오.
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
wsadmin -lang jacl -f c:/temp/script/test1.jacl
![[z/OS]](../images/ngzos.gif)
wsadmin -lang jacl -f '/temp/script/test1.jacl'
슬래시(/)를 경로 분리자로 사용해야 합니다. 백슬래시(\)는 작동하지 않습니다.
exec 명령을 사용하여 경로 재지정
경로 재지정에 대한 다음 Jacl exec 명령은 Linux 플랫폼에서는 작동하지 않습니다.
eval exec ls -l > /tmp/out
Jacl 스크립트 언어의 exec 명령이 경로 재지정을 충분하게 지원하지 않으므로 일부 플랫폼에서는 문제점이 발생할 수 있습니다.
Jacl 언어의 exec 명령을 사용할 때는 경로 재지정을 사용하지 마십시오. 대신, 변수의 경로 재지정에 exec 명령을 저장하거나 파일에 쓸 수 있습니다. 예를 들면 다음과 같습니다.
open /tmp/out w puts $fileId $result close $fileId
경우에 따라 Tcl에서 발행한 경로 재지정이 아닌 shell 및 .sh 명령 경로 재지정을 사용하여 경로 재지정을 수행할 수도 있습니다.