Bash如果失败则返回上一个命令

时间:2014-05-22 13:00:42

标签: linux bash

我有一个安装Windows共享的脚本,我正在研究它来学习bash脚本。

我遇到的问题是,有一个结果是用zenity写的,因为一旦安装了共享,当它无法挂载时会发出确定,它会发出 FAIL

现在我想再次询问用户他的密码,如果输出 FAIL ,那么如果她/他在密码中有错误,她/他可以重写它。

输入

## define a function that launched the zenity username dialog
get_password(){
    zenity --entry --width=300 --title="Mount $MOUNTDIR" --text="Password:" --hide-text
}

# attempt to get the password and exit if cancel was pressed
wPassword=$(get_password) || exit

# if the username is empty or matches only whitespace.
while [ "$(expr match "$wPassword" '.')" -lt "1" ]; do
    zenity --error --title="Error in password!" --text="Please check your password! Password field can not be empty!" || exit
    wPassword=$(get_password) || exit
done

输出:

# show if mounting was OK or failed
if [ $? -eq 0 ]; then
        zenity --info --title="Mounting public share succeeded!" --text="Location Documents/Shares/public!"
else
        zenity --error --title="Mounting public did not succeed!" --text="Please contact system administrator!"
fi

因此,如果输出是失败,我需要脚本重新运行输入。我希望你明白我的需要。

1 个答案:

答案 0 :(得分:1)

我认为你所追求的是:

while wPassword=$(get_password)
do
    if mount …options for mount…
    then
        zenity --info --title="Mounting public share succeeded!" \
               --text="Location Documents/Shares/public!"
        break
    else
        zenity --error --title="Mounting public did not succeed!" \
               --text="Please contact system administrator!"
    fi
done

这将运行get_password函数并保存输出;如果get_password函数返回非零状态,则循环将终止。在循环体中,它运行mount命令,如果成功,则报告成功并中断循环。如果失败,它会给出一条错误消息(不再有完全合适的消息),然后返回循环读取新密码。

  

...但问题是我在脚本中保存了密码功能,我需要在它成功之前启动它。

有多种选择:

while wPassword=$(get_password)
do
    if ! password_saver "$wPassword"
    then break    # Password saver reported error, presumably
    fi
    if mount …options for mount…
    …

或者:

while wPassword=$(get_password) &&
      password_saver "$wPassword"
do
    if mount …options for mount…
    …

如果密码保护程序仅指示错误而非报告错误,那么您需要在代码中报告问题;这将使第一个选择更好。您可以将break替换为continue以再次绕过循环。如果'停止循环密码保护程序错误'是正确的,然后第二个更简洁。