我可以在给定脚本下面给出返回值吗?

时间:2015-07-24 06:29:37

标签: shell

我是shell脚本的新手.. 我尝试使用bash函数的一个脚本...但我不知道如何给出返回值..任何人帮助我..

                    #!/bin/bash
                   #Example of menu programs
                    function file_directory () {
                    while true;
                    do
                    echo "*******************"
                    echo "1.Date"
                    echo "2.List of users"
                    echo "3.Open a file"
                    echo "4.delete a file"
                    echo "5.Exit"
                    echo "Enter a choice[1-5] :"
                    read choice
                    case $choice in
                    1) echo "Today date is : `date`" 
                         return 0;;
                    2) who 
                       return 0 ;;
                    3) `touch file`  
                        return 0;;
                    4) `rm -rf kk`
                            return 0;;
                    5) exit 
                        return 0 ;;
                    *) echo "choice wrong. try again"
                        return 1 ;;
                    esac
                    done
                    }
                   ## Main script starts here
                   file_directory

                    if [ "$?" -eq "0" ]; then
                     echo "success"
                    elif [ "$?" -eq "1" ]; then
                     echo "Something went wrong"
                    else
                        echo "failed"
                    fi

以上shell脚本我试过的.....帮帮我

2 个答案:

答案 0 :(得分:0)

请注意,您不能多次使用$?,因为它已设置为 last 命令的结果。此外,您将数字0与字符串“0”和运算符-eq(需要值,而不是字符串)进行比较,这是不对的。尝试:

retval=$?

if [ $retval -eq 0 ]; ...

答案 1 :(得分:0)

您的代码有几个多余的功能,可以防止它工作和/或不必要地使其复杂化。

因为case语句中的每个代码路径都以return语句结束,所以while true循环实际上从不循环。拿走它,您也可以删除明确的return语句,这实际上是一种改进,因为您将不再屏蔽您调用的程序中的任何错误状态。

此外,某些命令的进程替换是不正确的。要触摸文件,它是touch file,而不是`touch file`。后者实际上将从命令中检索输出(通常是一个空字符串),并尝试执行 作为命令,这肯定不是你想要的,并且是一个错误。

最后,很少需要显式检查返回代码$? - shell的控制流语句已经隐式地执行了此操作。因此,而不是command; if [ $? = 0 ]; then something; fi通常是if command; then something; fi,甚至只是简写为command && something

总结一下,您的固定脚本可能看起来像这样。

#!/bin/bash

function file_directory () {
    cat <<'____’
*******************
 1.Date
 2.List of users
 3.Open a file
 4.delete a file
 5.Exit
Enter a choice[1-5]:
____
    read choice
    case $choice in
     1) echo "Today date is : `date`" ;;
     2) who ;;
     3) touch file ;;
     4) rm -rf kk ;;
     5) exit ;;
     *) echo "choice wrong. try again"
           file_directory ;;
    esac
}

if file_directory; then
     echo "success"
else
     echo "Something went wrong"
fi