Điểm:0

Làm cách nào để xóa bản ghi khỏi tệp bằng bash scipt?

lá cờ pr

Tôi rất mới với việc viết kịch bản (một tuần sau) và đang thử một chương trình tạo sổ địa chỉ cho người dùng nơi họ có thể lưu thông tin chi tiết về bạn bè của mình. Trước tiên, tôi yêu cầu người dùng đặt tên cho sổ địa chỉ của họ và tôi lưu trữ nó trong biến 'abname', sau đó tôi lấy thông tin đầu vào cần thiết từ người dùng và in nó trong tệp văn bản abname.txt

Sự cố của tôi: Làm cách nào để xóa bản ghi tương ứng với id mà người dùng đã cung cấp? Đây là những gì tôi đã làm:

#!/bin/bash


id="1"
trong khi (đúng)
làm
    echo -e "\nMenu\n1.Tạo Sổ địa chỉ mới\n2.Xem tất cả nội dung của sổ địa chỉ\n3.Chèn bản ghi mới\n4.Xóa bản ghi\n5.Sửa đổi bản ghi\n6.Thoát"
    echo -e "\nNhập lựa chọn của bạn: "
    đọc ch
    echo -e "\nBạn đã chọn lựa chọn: $ch"
    trường hợp $ch trong
    1)
    echo -e "\nNhập tên sổ địa chỉ"
    đọc $abname;;  

    2)
    echo -e "\nAddress Book: $abname" #tên của sổ địa chỉ không được in ở đây vì lý do nào đó
    echo -e "\nID\t Tên\t Tuổi\t Địa chỉ"
    con mèo $abname.txt;; #in tất cả nội dung của tệp

    3)
    echo -e "\nId Của Người là: $id"    
    echo -e "\nNhập tên người:"
    đọc tên
    echo -e "\nNhập tuổi: "
    đọc tuổi
    echo -e "\nNhập địa chỉ:"
    đọc addr
    printf "$id\t $name\t $age\t $addr\n" >> $abname.txt
    id=$((id+1));; 

    4)
    echo -e "\nNhập ID của người sẽ xóa bản ghi: "
    đọc id
    grep -v "$id" $abname.txt > $abname.txt
    echo "Bản ghi đã bị xóa"
    mèo abname.txt;;

    5)
    echo -e "\n Todo";;

    6) thoát ra;;
    *) echo -e"\nLựa chọn không hợp lệ";;
    thoát hiểm
xong

Trợ giúp bổ sung: Nếu tệp abname.txt đã tồn tại, tôi muốn cập nhật biến 'id' cục bộ của mình tương ứng với id của người cuối cùng trong tệp văn bản, tôi đã thử làm điều này nhưng nó không hoạt động, tôi còn thiếu gì ở đây?

nếu [ -e $abname.txt ]
sau đó
    nguồn <$abname.txt>
    id = $id
fi
waltinator avatar
lá cờ it
Luôn dán tập lệnh của bạn vào `https://shellcheck.net`, trình kiểm tra cú pháp hoặc cài đặt `shellcheck` cục bộ. Hãy biến việc sử dụng `shellcheck` thành một phần trong quy trình phát triển của bạn.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.