Попытка добавить два условия в if

#bash

#bash

Вопрос:

Я пытаюсь выполнить этот скрипт bash, в котором я пытаюсь присоединиться к домену.

После domainjoin-cli соединения $Domain запрашивается пароль, и если мой пароль неверен, я хочу, чтобы скрипт завершал работу с сообщением «Не удалось», если, с другой стороны, это правильный пароль, он мне нужен для продолжения работы с оставшейся частью скрипта.

 #!/bin/bash  
echo -n "Domain: "  
read Domain  
domainjoin-cli join $Domain  
if [[ "$password" = 'SUCCESS' ]]  
then  
    echo "SUCCESS"  
    ls -l  
fi  
echo  
if [[ "$password" = 'Error' ]]  
    then  
        echo "Not SUCCESSFULL"  
        exit  
fi 
  

Если я выполняю скрипт, я получаю сообщение об ошибке:

 3.sh: 5: 3.sh: [[: not found  
3.sh: 10: 3.sh: [[: not found 
  

Это вывод, если пароль неверный:

 "Error: LW_ERROR_PASSWORD_MISMATCH [code 0x00009c56] The password is incorrect for the given account"
  

Это вывод, если пароль правильный:

 "Warning: System restart required Your system has been configured to authenticate to Active Directory for the first time. It is recommended that you restart your system to ensure that all applications recognize the new settings.

SUCCESS"
  

Комментарии:

1. (После отступа) похоже, что вы пропускаете fi after echo "SUCCESS" .

2. После внесения необходимых изменений я получаю сообщение об ошибке. 3.sh : 5: [: -eq: неожиданный оператор 3.sh : 10: [: -eq: неожиданный оператор

3. После редактирования у меня возникает эта «ошибка 3.sh : 5: 3.sh : [[: не найдено» «3.sh: 10: 3.sh: [[: не найдено»

4. Я не вижу, где вы задаете $password ; устанавливается ли это когда-нибудь? Кроме того, вы запускаете скрипт с помощью sh команды? Если да, то не делайте этого; это переопределяет shebang и запускает его с sh , а не bash . Вместо этого просто используйте ./scriptname (или путь к нему, если его нет в текущем каталоге).

5. Ну, $ password — это входные данные «domainjoin-cli join $Domain».

Ответ №1:

  • Используйте больше кавычек ™. Заключение переменной в кавычки гарантирует, что при запуске скрипта она расширится до одного «слова» или аргумента.
  • -eq и подобные предназначены для сравнения чисел, поэтому «УСПЕХ» будет рассматриваться как число ноль, а это не то, что вы хотите.
  • Не бойтесь Bashisms. [[ предпочтительнее [ , потому что его сложнее нарушить.

Результат:

 [[ "$password" = 'SUCCESS' ]]