
Так что по какой-то причине он всегда возвращает либо ssh, либо 'ok' независимо от того, как я изменяю тестовый оператор, и понятия не имею, что делать. Я оставил код ниже.
echo 'Wanna connect to the raspberry pi? (y/n)'
read $sssh
if [[ $sssh == "y" ]]
then
ssh [email protected]
else
echo 'ok'
fi
решение1
Утилита read
ожидает имя переменной в качестве своего аргумента. С помощью read $sssh
вы даете ей значение переменной, sssh
а не имя переменной.
Я предполагаю, что вы хотели бы прочитать значение sssh
переменной, в этом случае вам следовало бы использовать read sssh
.
Ваш измененный скрипт (включающий цикл чтения, который повторяется до тех пор, пока пользователь не введет допустимые данные):
#!/bin/bash
while true; do
read -p 'Connect to RPi? (y/n): ' yesno
case $yesno in
y) ssh ...; break ;;
n) echo ok; break ;;
*) echo invalid input >&2
esac
fi
или, длиннее,
#!/bin/bash
while true; do
read -p 'Connect to RPi? (y/n): ' yesno
if [[ $yesno == 'y' ]]; then
ssh ...
break
elif [[ $yesno == 'n' ]]; then
echo ok
break
fi
echo invalid input >&2
fi