BashScript中的流控制和返回值
我对bash脚本非常陌生,我一直在开发一个小bash文件,它可以为我做一些事情。首先,我使用system()从C函数调用它,我希望脚本返回一个值(1表示错误,0表示确定)。这可能吗BashScript中的流控制和返回值,c,bash,expect,zenity,C,Bash,Expect,Zenity,我对bash脚本非常陌生,我一直在开发一个小bash文件,它可以为我做一些事情。首先,我使用system()从C函数调用它,我希望脚本返回一个值(1表示错误,0表示确定)。这可能吗 int kinit() { int err = system("/home/bluemoon/Desktop/GSSExample/kinitScript.sh"); } 其次,我使用Zenity创建了一个弹出窗口来插入用户/密码。现在,根据用户所做的,应该发生多种情况。如果他关闭窗口或单击“取消”,则不会
int kinit() {
int err = system("/home/bluemoon/Desktop/GSSExample/kinitScript.sh");
}
其次,我使用Zenity创建了一个弹出窗口来插入用户/密码。现在,根据用户所做的,应该发生多种情况。如果他关闭窗口或单击“取消”,则不会发生任何事情。如果他单击“OK”,那么我应该检查输入(是否有空文本框或其他内容)
假设输入正确,我将使用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
如果我的操作不正常,expect命令将始终运行。取消或关闭Zenity窗口也总是导致出现“0”情况。我也尝试返回一个变量,但它说我只能从函数内部返回变量
如果有人能给我指点,我会很感激的。
戴夫
我希望脚本返回一个值
当然,只需在适当的位置使用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.
我花了一段时间计算出退货状态乘以256,但我让一切正常。如果有效,Zenity适用于其他情况,我可以在成功时返回0,在错误时返回1。唯一缺少的是能够返回expect上的值等,但我仍然会将您的答案标记为correct=)