需要在DCL脚本中提供选项Y或N.

时间:2017-09-12 07:53:25

标签: shell openvms dcl

我的要求是 - 我需要为用户提供两个选项(是或否)。因此,只要用户输入 Y N 以外的其他内容,系统就会抛出错误。我创建了下面的代码,但它没有给出预期的输出。

$ Y:== y
$ N:== n
$ ALPHA:
$ INQUIRE OPTION "Y or N"
$ DEFINE/NOLOG Report_file 'OPTION'
$       if f$type (OPTION) .eqs. "INTEGER"
$       then
$                   esc[0,7] = 27
$                   text = "Numeric values not accepted !!"
$                   write sys$output   "''esc'[5m''text'''esc'[m"
$               wait 0:0:0.15
$               set term/width=132
$               goto ALPHA
$       endif
$ if 'OPTION' .NES. Y 
$ then
$                 esc[0,7] = 27
$                 text = "Enter "Y" or "N""
$                 write sys$output   "''esc'[5m''text'''esc'[m"
$ endif
$ if 'OPTION' .NES. N
$ then
$                  esc[0,7] = 27
$                  text = "Enter "Y" or "N""
$                  write sys$output   "''esc'[5m''text'''esc'[m"
$ endif
  • 输出是:

每当我尝试给出interger值时,它就像我设计的那样运行.. 但是当我尝试输入除 Y N 之外的A,B,C等时,它会发出以下警告。

Aksh - $-> @test.com
Y or N: k
%DCL-W-UNDSYM, undefined symbol - check validity and spelling
\K\
%DCL-W-UNDSYM, undefined symbol - check validity and spelling
\K\
%DCL-W-UNDSYM, undefined symbol - check validity and spelling
\K\

对此有何建议?

1 个答案:

答案 0 :(得分:0)

嗯,在我看来,你只需要取消引用你的字符串比较变量并引用固定的字符串值:

糟糕:如果' OPTION' .NES。 ÿ 好的:如果OPTION .NES。 " Y"

有些人喜欢 傻瓜:如果"'' OPTION'" .NES。 " Y" !这将显示使用SET VERIFY

运行时OPTION的值

免费咨询......

1)在验证之前不要分配值: - DEFINE / NOLOG Report_file' OPTION' --->验证后移到脚本底部 --->使用"''选项'"如果你想在OPTION答案中接受空格(不是这种情况)

2)对用户来说更好一点 - 考虑使用F $ EXTRACT来获取OPTION的第一个字符,也允许"是" (和#34;是的!") - 在比较之前使用F $ EDIT进行大写。 - 考虑使用F $ LOC在可接受的值列表中查找OPTION,例如" YyNn"

试试这个:

$ Y:== y
$ N:== n
$ esc[0,7] = 27
$ALPHA:
$ INQUIRE OPTION "Y or N"
$ if OPTION .NES. Y .and. OPTION .NES. N
$ then
$     text =  "Enter ""Y"" or ""N"""
$     write sys$output   esc + "[5m" + text + esc + "[m"
$     goto ALPHA
$ endif
$ DEFINE/NOLOG Report_file 'OPTION'