но всякий раз, когда я пытаюсь запустить его с правильными переменными, он выводит «[: =: ожидается унарный оператор» и завершает работу.
Это потому, что у вас есть переменная без кавычек / пустая внутри [
либо заключите в кавычки свои переменные, либо используйте [[
, который является более безопасным и надежным.
, в то время как [$ i = "ПАРОЛЬ"]
значение $i
пусто, пользователь не может указать значение / ввод, поэтому оно не будет работать
Редактировать: Как указано @William Pursell
, независимо от того, какой тест вы используете, оно все еще есть некоторая ловушка, урок здесь состоит в том, чтобы дезинфицировать / проверить ввод, например, проверить его, если это действительно di git, если он не пустой и так далее.
Попробуйте, это может сделать то, что вы хотели.
#!/usr/bin/env bash
clear
p="PASSWORD"
read -rp "Please enter your password: " input ##: Ask the user to enter the password
until [[ $p == "$input" ]]; do ##: The loop will continue until both vars matches
clear
printf 'Please try again! %s does not match..\n' >&2 "$input"
read -rp "Please enter your password: " input
done
##: If it matches print a message and the value of input
printf '%s is a match!\n' "$input"