Рейтинг:0

Как удалить запись из файла с помощью скрипта bash?

флаг pr

Я очень новичок в написании сценариев (одна неделя) и пробовал программу, которая создает адресную книгу для пользователя, где они могут сохранять данные своих друзей. Сначала я прошу пользователя назвать свою адресную книгу и сохраняю ее в переменной 'abname', затем беру необходимые данные от пользователя и печатаю их в текстовом файле abname.txt.

Моя проблема: как я могу удалить запись, соответствующую идентификатору, предоставленному пользователем? Вот что я сделал:

#!/бин/баш


идентификатор = "1"
пока (правда)
делать
    echo -e "\nМеню\n1.Создать новую адресную книгу\n2.Просмотреть все содержимое адресной книги\n3.Вставить новую запись\n4.Удалить запись\n5.Изменить запись\n6.Выйти"
    echo -e "\nВведите свой выбор: "
    читать главу
    echo -e "\nВы выбрали вариант: $ch"
    регистр $ch в
    1)
    echo -e "\nВведите имя адресной книги"
    прочитать $abname;;  

    2)
    echo -e "\nАдресная книга: $abname" #по какой-то причине имя адресной книги здесь не печатается
    echo -e "\nID\t Имя\t Возраст\t Адрес"
    кот $abname.txt;; #распечатывает все содержимое файла

    3)
    echo -e "\nId человека: $id"    
    echo -e "\nВведите имя человека: "
    прочитать имя
    echo -e "\nВведите возраст: "
    прочитать возраст
    echo -e "\nВведите адрес: "
    читать адрес
    printf "$id\t $имя\t $возраст\t $адрес\n" >> $abname.txt
    id=$((id+1));; 

    4)
    echo -e "\nВведите ID человека, чья запись должна быть удалена: "
    прочитать идентификатор
    grep -v "$id" $abname.txt > $abname.txt
    эхо "Запись удалена"
    кот abname.txt;;

    5)
    echo -e "\n Сделать";;

    6)выход;;
    *) echo -e"\nНеверный выбор";;
    эсак
сделано

Дополнительная справка: если файл abname.txt уже существует, я хочу обновить свою локальную переменную «id», соответствующую идентификатору последнего человека в текстовом файле, я пытался сделать это, но это не сработало, что мне здесь не хватает?

если [ -e $abname.txt ]
тогда
    источник <$abname.txt>
    идентификатор = $ идентификатор
фи
waltinator avatar
флаг it
Всегда вставляйте свой скрипт в `https://shellcheck.net`, средство проверки синтаксиса или устанавливайте `shellcheck` локально. Сделайте использование `shellcheck` частью вашего процесса разработки.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.