shell脚本中的算术语法错误

时间:2012-07-14 06:39:03

标签: shell ksh

Shell脚本中有一个工具,它在中心显示菜单并执行一些任务。运行脚本时出现此错误:

\007
In center function
COLUMNS : columns 142
2 : 13
/ShellsAndSQLs/task_menu: line 80:  (columns 142 - 13) / 2 : arithmetic syntax error

此代码是从solaris env复制的,其中echo $ COLUMNS(为什么??)显示空白值。这时复制到Redhat Env时显示echo $ COLUMNS为142(因为它应该在全屏显示)。这是相关的部分代码:

#!/bin/ksh 

trap "tput sgr0; tput clear;" 1 2 3 4 5 6 7 8 10 11 12 13 14 15

if [ $# -ne 2 ]
then
    echo "Wrong parameters specified" >&2
    exit 1
fi

if [ "$COLUMNS" = "" ]
then
    echo "column in if"
    stty -a |
    awk -F \; '/columns/ { for (i = 1; i <= NF; i++) {
                               if ($i ~ "columns") {
                                   sub(" *columns *= *", "", $i);
                                   print $i;
                                   exit
                               }
                         }
             }' |
    read COLUMNS
fi

center()
{

 echo "In center function"
 echo "COLUMNS : $COLUMNS"
 echo "2 : ${#2}"
    n=$(( ($COLUMNS - ${#2}) / 2 ))
   #n=`expr $COLUMNS - ${#2} / 2`;
    echo "n is $n";
   echo "COLUMNS in center fun : $COLUMNS" ;
    tput cup $1 $n
    echo $_N $2 $_C
}

我知道它不会进入if条件,因为COLUMNS不是空白。也可能根据窗口的大小而有所不同。我如何制作

n=$(( ($COLUMNS - ${#2}) / 2 ))

工作?

1 个答案:

答案 0 :(得分:1)

您的echo和您的错误消息似乎保留了线索:

COLUMNS : columns 142

/ShellsAndSQLs/task_menu: line 80:  (columns 142 - 13) / 2 : arithmetic syntax error

“列”(全部小写)来自哪里?不知何故,你的变量正在添加一些文字。

ksh我没有发生这种情况,而且我看不到你脚本中发生了什么。