@Scorpiored88

Как работать с вводом данных от пользователя и if else в bash?

хочу сделать что типа этого :

#!/bin/bash

read -p "сменить файл конфигурации (y/n)? " answer
case ${answer:0:1} in
    y|Y )
        read -p "сменить хост? :"  dohost
        echo $dohost
        if [$dohost  = y|Y ]; then
                read -p "укажите новый хост : " host
                echo $host
        else
                host = "champ"
                echo $host
        fi 
       read -p "сменить порт? :"  doport
      if [$doport  = y|Y ]; then
                read -p "укажите новый порт : "  port
                echo $port
        else
                port = "8001"
                echo $port
        fi 
        touch myjson.json
        cat <<-EOF >> myjson.json
        {
        "host" : "$host",
        "port" : "$port"
        }
        EOF
         ;;
    * )
        echo No
    ;;
esac
  • Вопрос задан
  • 454 просмотра
Пригласить эксперта
Ответы на вопрос 4
@younghacker
Олег, это вопрос из разряда исправьте ошибки в моём скрипте. :)

Виталий,
Для начала вставьте пробел после открывающей скобки
if [$
Перед закрывающими скобками то Вы зачем-то его поставили. Где же красота симметрии? :)
Затем найдите в документации отличия между одинарными скобками [ ] и двойными [[ ]]
Вам нужны двойные. Так как внутри регулярное выражение. А также после = поставьте тильду и разберитесь с регуляными выражениями.
if [[ $doport =~ y|Y ]]; then
Этот код сработает на любой "y" в любой строке. например ответьте nnnooooyes. :)
Думаю так будет лучше:
if [[ $doport =~ ^[Yy]$ ]]; then
можете добавить ключик -n 1 в оператор read
обработайте ситуацию с отрицательным или неверным ответом (например кириллица).
и потом разберитесь с командой cut
зачем там touch ? зачем >> ? вам файл нужно дополнять? Что будет после двух запусков скрипта? Думаю это может выглядеть так:
`cat > myjson.json <<EOF
        {
        "host" : "$host",
        "port" : "$port"
        }
        EOF`

Для редактирования файла конфигурации из скрипта изучите sed.
Ну и наконец переделайте алгоритм :)
По ходу разберитесь с оформлением и отступами читая чужие хорошие скрипты.
Ответ написан
Комментировать
Olej
@Olej
инженер, программист, преподаватель
хочу сделать что типа этого :


Ну а проблема то в чём? хотите сделать - делайте...
Искусство программирования на языке сценариев кома...

Автор: Mendel Cooper
Перевод: Андрей Киселев
Ответ написан
3vi1_0n3
@3vi1_0n3
Там всё даже еще проще:
#!/bin/bash

# Дефолтные значения
HOST="champ"
PORT="8001"

read -p "сменить файл конфигурации? (y/n): " -n 1
if [ "$REPLY" == "y" ];
then
    read -p "сменить хост? (y/n): " -n 1
    if [ "$REPLY"  == "y" ];
    then
        read -p "укажите новый хост : " HOST
        echo $HOST
    fi 
    read -p "сменить порт? (y/n): " -n 1
    if [ "$REPLY"  == "y" ]
    then
        read -p "укажите новый порт : " PORT
        echo $PORT
    fi 

    cat <<EOF > myjson.json
{
"host" : "$HOST",
"port" : "$PORT"
}
EOF
else
    echo "Exiting without changes"
fi
Ответ написан
Комментировать
@azazelpw
Linux SA
Если по простому,
Что у вас делает модуль json понятия не имею, поэтому возможно там криво.

#!/bin/bash

read -p "сменить файл конфигурации? (y/n)" answer
if [ $answer = "y" ];
then
        read -p "сменить хост? (y/n):"  dohost
        echo $dohost
        if [ "$dohost"  = "y" ];
        then
                read -p "укажите новый хост : " host
                echo $host
        else
                host = "champ"
                echo $host
        fi 
       read -p "сменить порт? (y/n):"  doport
      if [ "$doport"  = "y" ]; then
                read -p "укажите новый порт : "  port
                echo $port
        else
                port = "8001"
                echo $port
        fi 

   touch myjson.json
        cat <<-EOF >> myjson.json
        {
        "host" : "$host",
        "port" : "$port"
        }
        EOF

    else
        echo "No"

fi
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы