You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash菜单脚本删除功能失效求助

修复Bash脚本的购物车删除功能

原脚本的删除功能存在核心逻辑错误,以下是修复后的完整脚本,以及问题说明:

#!/bin/bash
# 验证传入的listino.txt参数有效性
if [ $# -ne 1 ] || [ ! -f "$1" ]; then
    echo "使用方法: $0 listino.txt"
    exit 1
fi
LISTINO="$1"

cat "$LISTINO"
echo "Vuoi fare : ricerca/inserimento/eliminazione? "
read answer
case $answer in
   ricerca)
      echo "Inserisci stringa da cercare:"
      read stringa
      # 替换错误的awk用法,改用grep实现字符串匹配
      if grep -q "$stringa" "$LISTINO"; then
        echo "Stringa è presente in listino"
      else
        echo "Stringa non presente in listino"
      fi
      ;;
   inserimento)
      echo "Inserisci codice prodotto:"
      read codice
      # 验证编码是否存在于价目表
      if ! grep -q "\b$codice\b" "$LISTINO"; then
          echo "Codice prodotto non trovato nel listino!"
          exit 1
      fi
      echo "Inserisci quantità prodotto:"
      read quantita
      # 验证数量为正整数
      if ! [[ "$quantita" =~ ^[0-9]+$ ]]; then
          echo "Quantità deve essere un numero intero positivo!"
          exit 1
      fi
      echo "$codice    $quantita" >> carrello.txt
      echo "Prodotto aggiunto al carrello"
      ;;

   eliminazione)
      echo "Quale prodotto vuoi eliminare (inserisci il codice):"
      read prodottoEliminare
      # 检查购物车文件是否存在
      if [ ! -f carrello.txt ]; then
          echo "Carrello è vuoto!"
          exit 1
      fi
      # 通过临时文件实现删除:保留所有不匹配目标编码的行
      TEMP_FILE=$(mktemp)
      # 精确匹配编码,避免部分字符匹配
      grep -v "\b$prodottoEliminare\b" carrello.txt > "$TEMP_FILE"
      # 替换原购物车文件
      mv "$TEMP_FILE" carrello.txt
      echo "Elemento cancellato (se esisteva nel carrello)"
      ;;   
*) 
      echo "Scelta non valida"
      exit 1
esac

原删除功能的问题及修复说明

  1. 错误的文件遍历逻辑
    原代码for stringa in carrello.txt仅将文件名赋值给变量,并未读取文件内的每一行内容。修复后改用grep -v直接过滤目标行,结合临时文件替换原文件,高效实现删除操作。

  2. 条件判断语法错误
    原代码[ "$stringa"=="$a" ]中==两侧缺少空格,Bash会将整个表达式视为单个字符串,导致判断永远为真。本次修复采用更简洁的文件过滤方式,无需逐行判断。

  3. 未实际修改文件内容
    原代码仅输出提示信息,没有对carrello.txt做任何修改。修复后通过临时文件存储过滤后的内容,再覆盖原文件,真正实现删除目标商品的功能。

额外优化点

  • 添加脚本参数校验,确保传入有效的listino.txt文件
  • 修复搜索功能的awk用法错误,改用更直观的grep
  • 添加商品编码存在性验证,避免添加价目表外的商品
  • 添加数量合法性校验,确保输入为正整数
  • 处理购物车文件不存在的边界情况

内容的提问来源于stack exchange,提问作者saretta2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:08:14