2014-02-20 61 views
2

我有test.sh其中有多个返回条件,test1.sh只是echo echo语句。当我运行test2.sh时,我的逻辑应该运行test.sh处理文件,即“文件成功”和调用test1.sh脚本。当其他条件执行时,不应运行test1.sh脚本。“文件不成功”,“目录中不存在输入文件”在Unix shell脚本中设置退出代码

我面临的问题是它正在执行其他条件,如“文件不成功”,“目录中不存在输入文件”,它不会将指定的退出代码重新调入“1”,而是返回0,即从OS意味着作业成功。所以,我得到“0” test.sh所有不同的条件,使测试1 .SH获取调用无论如果文件处理失败etc.Pls咨询与返回代码

test.sh 
FILES=/export/home/input.txt 
cat $FILES | nawk -F '|' '{print $1 "|" $2 "|" }' $f > output.unl 
if [[ -f $FILES ]]; 
then if [[ $? -eq 0 ]]; then 
echo "File successfully" 
else 
echo "File not successfully" 
exit 1 
fi 
else 
echo "Input file doesn't exists in directory" exit 1 fi 

====== ================================================== ================

test1.sh 
echo "Input file exists in directory" 

test2.sh 

echo "In test2 script" 
./test.sh 
echo "return code" $? 
if [[ $? -eq 0 ]]; then 
echo "inside" 
./test1.sh 
fi 

+0

'test.sh'似乎没有正确的格式(见最后一行)。另外,如何初始化'$ FILES'?此外,在'test.sh'中测试'$?'看起来没有必要,因为你已经在使用'-f'测试'$ FILES'的存在了。 – ajk

+1

你的'test.sh'在语法上是无效的 - 'nawk'程序缺少一个结束的单引号,最后一行将不起作用,除非你至少在单独一行中加上'fi'。如果你确实在你的'echo'语句的同一行有'exit 1',那么它就会成为另一个输出字符串,这就解释了为什么退出代码没有设置。 – mklement0

+1

当你避免显式测试'$?'时,这类问题通常会消失。不用测试'$?',只需检查实际的呼叫。换句话说,只需编写'if ./test.sh;然后在里面回声; ...; fi' –

回答

2

你覆盖$? WH你在echo中使用它 - 在那之后,它包含echo本身的退出代码。将它存储在一个变量中以避免这种情况。

echo "In test2 script" 
./test.sh 
testresult=$? 
echo "return code" $testresult 
if [[ $testresult -eq 0 ]]; then 
    echo "inside" 
    ./test1.sh 
fi 

编辑补充:这是很难告诉你从test.sh想要的东西,你贴的代码是不完整的,甚至不运行。它看起来像你的意思是catif,因为否则它错误时输入文件丢失,并且你的$?测试什么也不做。所以,我重新安排这样的:

FILES=input.txt 

if [[ -f $FILES ]]; then 
    cat $FILES | awk -F '|' '/bad/{ exit 1 }' 
    if [[ $? -eq 0 ]]; then 
    echo "File processed successfully" 
    else 
    echo "File processing failed" 
    exit 1 
    fi 
else 
    echo "Input file doesn't exist in directory" 
    exit 1 
fi 

我已经改变了awk脚本演示条件的所有工作:现在,如果我把这个词bad在input.txt中,你会看到“文件处理失败”消息,否则你会看到成功;删除文件,你会看到输入文件不存在的消息。

+0

我试过这个选项,但它没有奏效。它仍然返回“0”的所有其他条件 – user3326101

+0

我认为你的意思是在test.sh中的其他条件。我已经更新了解决该问题的答案,但很难说出你在那里想要做什么。 – bazzargh

+0

@hi所有 - 我已经更新了脚本,以了解我在做什么,但没有多大意义。如果猫命令是成功的,它将一直返回“0”。我的问题是否它将要任何其他的块都会阻止为什么它仍在重新调整“0”。 – user3326101