【问题标题】:Flow Control and Return Values in a BashScriptBash 脚本中的流控制和返回值
【发布时间】:2014-04-30 21:36:55
【问题描述】:

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

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

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

假设输入正确,我将使用 Expect 运行 kinit 程序(它是与 Kerberos 相关的提示)并登录。现在,如果密码正确,则提示关闭并且脚本应该返回 0。如果不是,提示将显示类似“Kinit:未找到用户”的内容。我想在任何错误情况下(关闭窗口、单击取消或错误的凭据)在我的脚本中返回 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”。我也尝试返回一个变量,但它说我只能从内部函数返回变量?

好吧,如果有人能给我一些指示,我将不胜感激。 戴夫

【问题讨论】:

    标签: c bash expect zenity


    【解决方案1】:

    我希望脚本返回一个值

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

    退出:退出 [n] 退出外壳。 以状态 N 退出 shell。如果省略 N,则退出状态 是最后执行的命令。

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

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

    【讨论】:

    • 我花了一段时间才弄清楚返回状态乘以 256,但我一切正常。如果有效,Zenity 适用于其他情况,我可以在成功时返回 0,在错误时返回 1。唯一缺少的是能够按预期返回值等,但我仍然会将您的答案标记为正确 =)
    猜你喜欢
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多