带有三个选项的菜单的Bash shell脚本

iih3973s  于 2023-03-03  发布在  Shell
关注(0)|答案(1)|浏览(112)

我有这样一个练习:创建一个BASH shell脚本“menu”,它接受一个文件“listino.txt”作为参数,结构如下:
成本数量代码01953 2 15 07934 1 20 084 Gd 10 30 9038 H 1 5
并且实现可从菜单访问的以下功能:
1.搜索-要求用户输入要在整个价目表中搜索的字符串并执行搜索
1.添加-要求用户输入要添加的产品代码(价目表的第一个字段)和所需的项目数量,验证所做的选择并将其存储在购物车文件中
1.删除-从购物车中删除产品
但是删除功能对我不起作用,你能帮帮我吗(这是最后一种情况)

#!/bin/bash
cat listino.txt
echo "Vuoi fare : ricerca/inserimento/eliminazione? "
read answer
case $answer in
   ricerca)
      echo "Inserisci stringa  da cercare:\n"
      read stringa
      if awk "${stringa}" listino.txt
      then
        echo "Stringa e presente in listino"
        else
        echo "Stringa non presente in listino"
        fi
       
      ;;
   inserimento)
      echo "Inserisci codice prodotto:\n"
      read codice
      echo "Inserisci quantita prodotto:\n"
      read quantita
      a="$codice    $quantita"
      echo $a >> carrello.txt
      ;;

   eliminazione)
      echo "quale prodotto vuoi eliminare:"
      read prodottoEliminare
      a="$prodottoEliminare"
      for stringa in carrello.txt ; do
      if [ "$stringa"=="$a" ];
          then
              echo "Elemento cancellato"
          else
              echo "Elemento non cancellato"
       fi
      done
      ;;   
*) 
esac

谢谢

ufj5ltwl

ufj5ltwl1#

你可以用不同的方法来做这件事。
一个是

eliminazione)
      echo "quale prodotto vuoi eliminare:"
      read prodottoEliminare
      sed -i "/$prodottoEliminare/d" carrello.txt
      ;;

如果你想要一些反馈,你可以先用grep测试(或者像ricerca)一样用awk测试),然后用sed删除:

eliminazione)
      echo "quale prodotto vuoi eliminare:"
      read prodottoEliminare
      if grep -q "$prodottoEliminare" carrello.txt; then
          sed -i "/$prodottoEliminare/d" carrello.txt
          echo "Elemento cancellato"
      else
          echo "Elemento non cancellato"
      fi
      ;;

从你问题中的评论来看,sed命令似乎在你的Mac上不起作用。我对Mac了解不够,但你总是可以用其他东西来替换它。我想到的一个解决方案是再次使用grep,但要颠倒过来(查找除该字符串之外的任何东西):

eliminazione)
      echo "quale prodotto vuoi eliminare:"
      read prodottoEliminare
      if grep -q "$prodottoEliminare" carrello.txt; then
          grep -qv "$prodottoEliminare" carrello.txt > carrello.txt.tmp
          mv carrello.txt.tmp carrello.txt
          echo "Elemento cancellato"
      else
          echo "Elemento non cancellato"
      fi
      ;;

相关问题