Как бороться с неправильным паролем в моем скрипте входа в оболочку? - PullRequest
0 голосов
/ 30 апреля 2019

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

Я пытался сделать это:

#!/bin/bash

unset user
unset pass
testLoginValue=false

while [[ "$testLoginValue" = false ]]; do
        while [ -z ${user} ]; do
                read -p "Username: " user
        done
        while [ -z ${pass} ]; do
                read -sp "Password: " pass
        done

        testLogin=$(smbclient '\\my.windows.server.ip\folder\' $pass -U domain\\$user -c 'help') # This connect to the server and get the result of the "help" command

        if [[ $testLogin == "session setup failed: NT_STATUS_LOGON_FAILURE" ]]; then
                echo "Username or password incorrect."
        else
                echo "Successful connection."
                testLoginValue=true
        fi
done

echo "the script will continue..."

Проблема в том, что в этом коде скрипт повторяет "Username or password incorrect." в цикле без остановки. Я хотел бы, чтобы он повторил "Username or password incorrect." только один раз, чтобы снова запросить учетные данные. Как я могу это сделать?

1 Ответ

1 голос
/ 30 апреля 2019

Переменные user и pass должны снова быть unset.Начните с

#!/bin/bash
testLoginValue="false"

while [[ "${testLoginValue}" = "false" ]]; do
   unset user
   unset pass
   while [ -z "${user}" ]; do
      read -p "Username: " user
   done
   while [ -z "${pass}" ]; do
     read -sp "Password: " pass
   done

Не по теме: возможно, измените цикл на

while :; do
   ...
   if [[ "${somevar}" = "Successful connection." ]]; then
      break
   fi
done
...