Как работать с вводом данных от пользователя и if else в bash?
Олег, это вопрос из разряда исправьте ошибки в моём скрипте. :)
Виталий,
Для начала вставьте пробел после открывающей скобки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.
Ну и наконец переделайте алгоритм :)
По ходу разберитесь с оформлением и отступами читая чужие хорошие скрипты.
Если по простому, 
Что у вас делает модуль 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