语法错误检查帐号是否为数字

时间:2013-09-14 18:36:47

标签: shell

if [[ ${account_nr} =~ ^[0-9]+$ &&  ${from_account_nr} =~ ^[0-9]+$ ]]

这是为了检查帐号是否为数字。我收到了语法错误。

此问题的早期版本缺少if[[之间的空格;实际代码具有所需的空间。

显示以下错误消息:

syntax error: `${account_nr}' missing expression operator

我正在使用bash shell。你们人们告诉它正在发挥作用。但我正在试着像下面这样的例子,它给出了错误。

jai = "CNM"
hanuman = "BRK"
if [[ $jai =~ ^[0-9]+$ && $hanuman =~ ^[0-9]+$  ]]
then
  echo "Jai hanuman"
  echo "valid input"
fi

它显示如下错误。

./temp.sh: line 11: jai: command not found
./temp.sh: line 12: hanuman: command not found

在我的实际程序中,它不起作用: "现在我明确了问题:"

  1. 在一个文件中,我存储了所有交易详情,每条交易都有一行。
  2. 每次我阅读一个交易细节时使用下面的while循环 同时读取空白srvrtid空白member_nr空白account_nr空白acct_type空白routing_nr空白金额空白proc_date空白from_account_nr空白from_acct_type空白 做
  3. 在此我要检查account_nr和from_account_nr值是否为数字 if if条件我给出了以下

    if [[ ${SQL_STATEMENT} -gt 0 && ${account_nr} =~ ^[0-9]+$ && ${from_account_nr} =~ ^[0-9]+$ ]]

  4. &{SQL_STATEMENT}未显示任何错误,此SQL_STATEMENT分配了SELECT查询返回的值。(总交易次数)。

  5. 当我运行脚本时,它显示以下错误。

    语法错误:`$ {account_nr}'缺少表达式运算符。

  6. 请帮我解决问题。

2 个答案:

答案 0 :(得分:3)

if[之间需要一个空格:

$ account_num=1234
$ if [[ ${accoun_num} =~ ^[0-9]+$ ]] ; then echo "foo" ; fi
foo
$

此外,这在bash

中工作正常
$ account_nr=1234
$ from_account_nr=9876
$ if [[ ${account_nr} =~ ^[0-9]+$ && ${from_account_nr} =~ ^[0-9]+$ ]] ; then echo "foo" ; fi
foo
$

您的shell变量赋值也不能有空格。以下是对您最新版本的更正:

jai="CNM"
hanuman="BRK"
if [[ $jai =~ ^[0-9]+$ && $hanuman =~ ^[0-9]+$  ]]
then
  echo "Jai hanuman"
  echo "valid input"
fi

由于jaihanuman都不是数字,因此上述脚本运行并输出任何内容。如果将它们都设置为数字,则会显示:

Jai hanuman
valid input

请注意,如果你放一个空格,如下:

jai = "CNM"

然后shell(bash)认为您正在执行一个名为jai的命令,并且您收到指示的错误。

答案 1 :(得分:0)

此行适用于Bash,Zsh或Ksh等高级shell。

if [[ ${account_nr} =~ ^[0-9]+$ &&  ${from_account_nr} =~ ^[0-9]+$ ]]

它不适用于POSIX shell但是-still-它不会显示语法错误。相反,它会显示找不到命令[[。其他原因可能与if声明本身有关,但您必须向我们展示确切显示的消息,例如bash: syntax error near unexpected token `fi'