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

标签 c bash expect zenity

我对 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

如果工作不正常,expect 命令总是运行。取消或关闭 Zenity 窗口也始终会导致情况“0”。我也尝试返回一个变量,但它说我只能从函数内部返回变量?

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

最佳答案

i'd like the script to return a value

当然,只需在适当的地方使用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.

My if isn't working properly, the expect command is always run.

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

关于c - Bash 脚本中的流程控制和返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23398455/

相关文章:

c - 如何使用 libevent 库在程序中搜索和删除事件?

python - 如何编写 JIT 库?

linux - Debian bash 脚本在命令行下运行良好;在 crontab 中失败

linux - --proof=* 意思是shellscript

tcl - 如何退出 TCL proc,而不退出在该 proc 内运行的进程

linux - 如何在linux expect的exec命令中执行多个命令

ubuntu - 预期 5.43.0 和 tclsh 8.4 的段错误

c - 关于使用函数、指针和动态分配的练习 (C)

linux - 如何使用 find 和 grep 列出文件名

cat/Xargs/command VS for/bash/command