Intereting Posts
Двойные параметры загрузки исчезли и теперь просто загружаются прямо в Ubuntu Почему драйвер nvidia 346 работает, а драйвер 384 не работает Я могу потерять поддержку LTS, если я перейду на версию, отличную от LTS? Компиляция источника в пакет DEB Файл перемещения командной строки с длинным пути к каталогу без повторения пути к каталогу Как запустить 2 сеанса X с разными менеджерами дисплеев? Как использовать проводное подключение к Интернету с телефоном Android (обратный модем)? Guake не будет отображать UTF-8 после принудительной перезагрузки Как конвертировать изображение в PDF? Поиск и замена URL-адресов в постфиксных файлах – Linux / Ubuntu Установка Ubuntu 14.04 показывает ошибку / boot / efi и берет навсегда Восстановить экран входа в Ubuntu 16.04 цифровая клавиатура моего ноутбука не работает Как изменить размер разделов Ubuntu и Windows? Как имитировать ввод клавиатуры?

Сценарий входа в систему 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 

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