我正在尝试测试脚本是否正确结束。 我要求用户输入是/否。如果答案是肯定的,脚本将执行某些操作,如果答案为否,则脚本将显示错误消息。 最后,如果答案是其他内容,脚本将显示另一个不同的错误消息。 当我回答是,脚本必须正确结束。 (退出代码0) 当我回答“否”时,脚本必须正确结束。 (退出代码1) 当我回答其他内容时,脚本必须不正确地结束。 (退出代码1)。我的问题是当我激发退出代码1时,脚本不会显示任何错误消息。脚本完成后我执行$?我看到退出代码是1,所以if-else运行良好,但似乎功能不起作用
#!/bin/bash
function testingexit(){
if [ "$?" = "0" ]
then
echo "test ok"
else
echo "test error"
fi
}
read -p "(yes/no): " answer
if [ "$answer" = "yes" ] || [ "$answer" = "YES" ]
then
echo "hello"
elif [ "$answer" = "no" ] || [ "$answer" = "NO" ]
then
echo "error1"
exit 1
else
echo "error2"
exit 1
fi
#!/bin/bash
clear
function menu()
{
echo "¿Hi what do you want to do?:"
echo
echo "1) opt1"
echo "2) opt2"
echo "2) opt3"
echo "9) Exit"
echo
echo -n "Choose an option: "
}
# the function use 'return' instead of 'exit'
function get_user_input {
read -p "Do you want to start the program?: " answer if [[ "$answer" =~ ^yes|YES$ ]]
then
return 0
elif [[ "$answer" =~ ^no|NO$ ]]
then
return 1
else
return 2
fi
}
# invoke
get_user_input
func_return=$?
function testingexit () {
if [ $func_return = "0" ]
then
echo "test ok"
else
echo "test error"
fi
}
# default option
opt="0"
# loop 9 to exit
until [ "$opt" -eq "9" ];
do
case $opt in
1)
echo "opt1"
menu
;;
2)
echo "opt2"
menu
;;
3)
echo "opt3"
menu
;;
*)
menu
;;
esac
read opt
done
testingexit
exit $func_return
现在我想在回答是的时候使用这个菜单。 当我回答“否”时,不应显示菜单,并且脚本必须结束显示消息“测试错误”。
答案 0 :(得分:1)
你的脚本在这里工作正常:
chris@druidstudio:~⟫ ~/tmp/test.sh ; echo $?
(yes/no): no
error1
1
chris@druidstudio:~⟫ ~/tmp/test.sh ; echo $?
(yes/no): wibble
error2
1
chris@druidstudio:~⟫ ~/tmp/test.sh ; echo $?
(yes/no): yes
hello
0
chris@druidstudio:~⟫
我没有看到功能的重点,你从不称呼它。
答案 1 :(得分:1)
您的脚本永远不会有两个原因:
exit
之后无法在脚本中运行任何东西,因为'exit'会中止脚本。为什么不按如下方式重写脚本:
#!/bin/bash
# the function use 'return' instead of 'exit'
function get_user_input {
read -p "(yes/no): " answer
if [[ "$answer" =~ ^yes|YES$ ]]
then
echo "hello"
return 0
elif [[ "$answer" =~ ^no|NO$ ]]
then
echo "error1"
return 1
else
echo "error2"
return 2
fi
}
# invoke
get_user_input
func_return=$?
if [ $func_return = "0" ]
then
echo "test ok"
else
echo "test error"
fi
exit $func_return
答案 2 :(得分:1)
您的函数[{articles: 1
date:Tue Apr 26 2016 00:00:00 GMT-0500 (CDT)
key:"2016-04-26T05:00:00.000Z"
values:1},
{articles:1
date:Thu Apr 28 2016 00:00:00 GMT-0500 (CDT)
key:"2016-04-28T05:00:00.000Z"
values:1},
{articles:2
date:Sun May 08 2016 00:00:00 GMT-0500 (CDT)
key:"2016-05-08T05:00:00.000Z"
values:2},
{etc...}]
永远不会被调用,您需要使用trap
让它在程序结束时被调用:
testingexit
您还可以考虑将if语句更改为testingexit() {
...
}
trap testingexit EXIT
read -rp "(yes/no): " answer
...
语句:
case