J'écris un script de montage pour le partage Windows à exécuter après la connexion. Je l'ai fait avec bash et zenity et cela fonctionne, mais maintenant je dois le rendre meilleur, donc si le champ nom d'utilisateur et le champ mot de passe sont vides, revenez à la saisie.
Exemple
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
Donc, je veux que ce script ramène l'utilisateur à l'entrée si Kasutajanimi aka nom d'utilisateur ou Parool aka mot de passe est vide. Même si l'espace est pressé.
J'ai cherché le tout puissant Google et je sais que je peux le faire avec return.
Je le ferais comme ça:
#!/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
Vous pouvez essayer quelque chose comme ça:
# 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
et le même pour la saisie du mot de passe.