我有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
'test.sh'似乎没有正确的格式(见最后一行)。另外,如何初始化'$ FILES'?此外,在'test.sh'中测试'$?'看起来没有必要,因为你已经在使用'-f'测试'$ FILES'的存在了。 – ajk
你的'test.sh'在语法上是无效的 - 'nawk'程序缺少一个结束的单引号,最后一行将不起作用,除非你至少在单独一行中加上'fi'。如果你确实在你的'echo'语句的同一行有'exit 1',那么它就会成为另一个输出字符串,这就解释了为什么退出代码没有设置。 – mklement0
当你避免显式测试'$?'时,这类问题通常会消失。不用测试'$?',只需检查实际的呼叫。换句话说,只需编写'if ./test.sh;然后在里面回声; ...; fi' –