Сценарий входа в систему Bash с zenity для монтирования CIFS

Я пишу сценарий монтирования для общего ресурса Windows, который запускается после входа в систему. Я сделал это с bash и zenity, и он работает, но теперь мне нужно сделать это лучше, поэтому, если поле имени пользователя и пароля пуст, вернитесь к вводу.

пример

wUsername=`zenity --entry --width=300 --title="Mount $MOUNTDIR" --text="Kasutajanimi:"` #if [ $? -ne 0 ]; then # exit 1 #fi if [ -z "$wUsername" ]; then zenity --error --title="Viga kasutajanimes!" --text="Palun sisestage oma kasutajanimi" # get the windows password wPassword=`zenity --entry --width=300 --title="Mount $MOUNTDIR" --text="Parool:" --hide-text` if [ $? -ne 0 ]; then exit 1 fi 

Поэтому я хочу, чтобы этот скрипт возвращал пользователя обратно, если пароль Kasutajanimi aka или пароль Parool aka пуст. Даже если нажимается пробел.

Я искал все могущественные Google для этого, и я знаю, что могу как-то сделать это с возвращением.

Я бы сделал это так:

 #!/usr/bin/env bash ## Define a function that launches the zenity username dialog get_username(){ zenity --entry --width=300 --title="Mount $MOUNTDIR" --text="Kasutajanimi:" } ## Define a function that launches the zenity password dialog get_password(){ zenity --entry --width=300 --title="Mount $MOUNTDIR" --text="Parool:" --hide-text } ## Attempt to get the username and exit if cancel was pressed. wUsername=$(get_username) || exit ## If the username is empty or matches only whitespace. ## See http://www.tldp.org/LDP/abs/html/string-manipulation.html ## for an explanation of this syntax. The . means any non-space ## character so when this is less than 1, the username is empty ## or just whitespace. Since this is a while loop, the process ## will be repeated until the username is correctly submitted. while [ "$(expr match "$wUsername" '.')" -lt "1" ]; do zenity --error --title="Viga kasutajanimes!" --text="Palun sisestage oma kasutajanimi" wUsername=$(get_username) || exit done ## Same as the previous loop but for the password. Sorry if ## the message is wrong, I don't speak this language :) wPassword=$(get_password) || exit while [ "$(expr match "$wPassword" '.')" -lt "1" ]; do zenity --error --title="Viga Parool!" --text="Palun sisestage oma Parool" wPassword=$(get_password) || exit done 

Вы можете попробовать что-то вроде этого:

 # ask for username while true # start infinity loop do wUsername=`zenity --entry --width=300 --title="Mount $MOUNTDIR" --text="Kasutajanimi:"` # user abort if [ $? -ne 0 ]; then exit 0 fi # remove spaces wUsername=$( echo "$wUsername" | tr -d ' ' ) # check user input if [ -z "$wUsername" ]; then # user input is empty -> throw error and continue the loop zenity --error --title="Viga kasutajanimes!" --text="Palun sisestage oma kasutajanimi" else # user input is not empty break # leave loop fi done 

и то же самое для ввода пароля.