Bash脚本中的流控制和返回值

时间:2014-04-30 21:36:55

标签: c bash expect zenity

我很擅长bash脚本编写,我一直在研究一个可以为我做一些事情的小bash文件。首先,我使用system()从C函数调用它,我希望脚本返回一个值(1表示错误,0表示OK)。这可能吗?

int kinit() {
    int err = system("/home/bluemoon/Desktop/GSSExample/kinitScript.sh");
}

其次,使用Zenity,我设法创建一个弹出窗口来插入用户/密码。现在,根据用户的行为,应该发生多种事情。如果他关闭窗口或点击“取消”,则不会发生任何事情。如果他点击“确定”,那么我应该检查输入(对于空文本框或其他东西)。

假设输入正确,我将使用Expect运行kinit程序(它是与Kerberos相关的promt)并登录。现在,如果密码正确,则提示关闭,脚本应返回0.如果不是,提示将显示类似“Kinit:user not found”的内容。我想,在任何错误的情况下(关闭窗口,单击取消或错误的凭据)在我的脚本中返回1并在成功时返回0。

#!/bin/bash
noText=""
ENTRY=`zenity --password --username`
case $? in
         0)
        USER=`echo $ENTRY | cut -d'|' -f1`
        PW=`echo $ENTRY | cut -d'|' -f2`

        if [ "$USER"!="$noText" -a "$PW"!="$noText" ] 
        then
            /usr/bin/expect -c 'spawn kinit '`echo $USER`'; expect "Password for '`echo $USER`':" { send "'`echo $PW`'\r" }; interact'
        fi
        ;;
         1)
                echo "Stop login.";;
        -1)
                echo "An unexpected error has occurred.";;
esac

我的if工作不正常,expect命令总是运行。取消或关闭Zenity窗口也总是导致大小写为“0”。我也尝试返回一个变量,但它说我只能从函数内部返回变量?

好吧,如果有人能给我一些指示,我会很感激。 戴夫

1 个答案:

答案 0 :(得分:1)

  

我希望脚本返回一个值

当然,只需在适当的地方使用exit

exit: exit [n]
    Exit the shell.

    Exits the shell with a status of N.  If N is omitted, the exit status
    is that of the last command executed.

  

我的if工作不正常,期望命令总是运行。

if [ "$USER" != "$noText" -a "$PW" != "$noText" ]
#           ^  ^                  ^  ^
#           |  |                  |  |
#           \----- notice spaces ----/