2016-02-22 8 views
2

У меня возникли проблемы с скриптом bash. Я пытаюсь автоматизировать процесс отправки файлов на мой малиновый pi через ssh. Я хочу указать путь к файл/каталог, а затем скопируйте его в каталог /home/pi/push на моем пике. Затем я хочу спросить, есть ли другой файл для отправки, и если да, тогда выполните цикл назад, иначе выйдите из программы. Я обнулял IP-адрес для очевидных по соображениям безопасности.Ошибка синтаксиса: «(« неожиданный (ожидающий «тогда»)

done=0 
while [ $done -lt 1 ] 
do 
    read -r -p "Path to file: " path 
    spawn scp -r $path [email protected]:/home/pi/push 
    expect "assword:" 
    send "password\r" 
    interact 

    read -r -p "Send another? [y/N] " response 
    if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]] 
    then 
     $done=1 
    else 
     echo "Ending file transfer." 
    fi 
done 

Если у вас есть предложения по лучшим способом для достижения этой цели, что было бы здорово, как хорошо!

+4

Пожалуйста, обратите внимание: http://www.shellcheck.net/ – Cyrus

+4

Параметр 'spawn' здесь меня беспокоит - это' expect' ключевое слово, а не оболочка ключевых слов. Вы не можете смешивать языки так, как вы пытаетесь это сделать, - это два разных интерпретатора с двумя очень разными синтаксисами. –

+2

Хорошая точка @CharlesDuffy. Посмотрите на настройку [аутентификации открытого ключа на ваш Pi] (https://www.raspberrypi.org/documentation/remote-access/ssh/passwordless.md), чтобы избежать ввода пароля. – miken32

ответ

1

Просто используйте or в тесте или избегать скобок в регулярном выражении. Кроме того, нет необходимости тестировать для случая с набором nocasematch; и с этим требованием в стороне, вам даже не нужно регулярное выражение.

shopt -s nocasematch 
... 
if [[ "$response" = "yes" || "$response" = "y" ]] 
+1

POSIX-стандартный способ сделать эту проверку будет с оператором 'case'. 'case $ response в [Yy] [Ee] [Ss] | [Yy]) done = 1 ;; *) echo "Ending file transfer." ;; esac' –

+1

... сказал, что здесь гораздо большая проблема в том, что OP пытается использовать синтаксис ожидания в сценарии оболочки. –

+1

Огромное спасибо, @ miken32! Работает как шарм. Можете ли вы объяснить мне, почему старый способ не сработал? Я только начинаю изучать этот материал. –

Смежные вопросы