Shell Script 中有一个工具,它在中心显示菜单并执行一些任务。运行脚本时出现此错误:
\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(why??) 显示空白值。当复制到 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 不是空白的。此外,COLUMNS 可能会根据窗口的大小而有所不同。我该如何制作
n=$(( ($COLUMNS - ${#2}) / 2 ))
工作?