我的KornShell(ksh)脚本的一部分如下。
let "value=`awk NR==14 ${TEMP_DIR}/IR4723/count_part_UNVM.txt`"
let "var= value"
if [ $var -gt 0 ]
then
load_data ${count_part[$i]}
fi
脚本上面部分的第一行抛出以下错误:
arithmetic syntax error LOADTODB/ShellsAndSQLs/IR4723/load_gen_tmp_tab.ksh[84]: test: 8
以上脚本从文件count_part_UNVM.txt值8读取第14行。 我陷入了这个问题。请帮我解决问题。
答案 0 :(得分:1)
这是一个错字,还是你错过了价值前面的'$',即(你的第二行)
let "var=$value"
我认为应该是
let var="$value"
通过启用shell调试功能,您可以在构建脚本时消除许多问题,即
set -vx
let "var= value"
set +vx
或者将set -vx
放在脚本顶部附近,看看如何处理所有脚本。
EDIT3 或在-vx
后面#!/bin/bash
放置#!/bin/bash -vx
,即let value="$(awk 'NR==14' ${TEMP_DIR}/IR4723/count_part_UNVM.txt)"
。
EDIT2 我错过了您的第一条评论,是的,第1行看起来也有问题。试试这个
$( )
请注意,使用cmd替换的反引号在'New Kornshell Language'~1995中被声明为已弃用。print --"value=XX${value}XX
cmd-substition很容易嵌套,是您最好的选择。
另请注意,awk脚本(在cmdline上)应该作为单个参数呈现,方法是用单引号或dbl引号括起来。 (但我并不完全确定你需要引用,因为你的'程序'中没有空格。)如果修订版不起作用,请在作业后添加set -vx
并编辑上面的问题以显示输出
编辑根据您的评论/问题,周围有一些shell脚本调试程序,但我从不使用它们。如果您真的想尝试,请搜索Rosenberg ksh book调试器。
print -- "var=XX${var}XX"
应该被称为“执行跟踪”。它会在执行代码之前显示代码行或代码块,然后将任何变量扩展为其值。这是人们调试ksh脚本的典型方式。您还可以添加{{1}}等语句来查看变量的各个值,但这可能会使您的输出变得混乱,并且可能需要您转换这些参数,从而迫使您再次编辑脚本。
我希望这会有所帮助。
答案 1 :(得分:0)
为什么在ksh中使用let
?以下是对您的代码的建议。
<强> example.ksh 强>
#!/bin/ksh
#Initialize Varables
TEMP_DIR=tempDir/IR4723
var=""
initialize(){
echo "Entering initialize"
echo "Exiting initialize"
}
function1(){
echo "Entering function1"
echo ${PWD}
file=${PWD}/${TEMP_DIR}/count_part_UNVM.txt
readLine "${file}"
echo "var: "${var}
if [[ ${var} -gt 0 ]]; then
load_data ${count_part[$i]}
fi
echo "Exiting function1"
}
createDir(){
echo "Entering createDir"
mkdir -p ${1}
echo "Exiting createDir"
}
createFileWithRandomCount(){
echo "Entering createFileWithRandomCount"
orgDirectory=${PWD}
cd ${1}
> ${2}
print ${RANDOM} >> ${2}
cd ${orgDirectory}
echo "Exiting createFileWithRandomCount"
}
readLine(){
echo "Entering readLine"
file=${1}
while read line
do
# display line or do somthing on $line
var="$line"
done <"$file"
echo "Exiting readLine"
}
load_data(){
echo "Entering load_data"
echo "Exiting load_data"
}
#-----------
#---Main----
#-----------
echo "Starting: "${0}" with Input Parameters: {1: "${1}" {2: "${2}" {3: "${3}
initialize #function call#
createDir ${TEMP_DIR} #function call#
createFileWithRandomCount ${TEMP_DIR} count_part_UNVM.txt #function call#
function1 #function call#
<强>输出:强>
$ ksh -i example.ksh
Starting: example.ksh with Input Parameters: {1: {2: {3:
Entering initialize
Exiting initialize
Entering createDir
Exiting createDir
Entering createFileWithRandomCount
Exiting createFileWithRandomCount
Entering function1
/tmp
Entering readLine
Exiting readLine
var: 11984
Entering load_data
Exiting load_data
Exiting function1