web-dev-qa-db-fra.com

Script de connexion Bash avec zenity pour le montage CIFS

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.

3
mYzk

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
4
terdon

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.

3
TuKsn