bash switch-case 语句给出语法错误

Posted

技术标签:

【中文标题】bash switch-case 语句给出语法错误【英文标题】:bash switch-case statement gives syntax error 【发布时间】:2016-01-21 07:34:32 【问题描述】:

#!/bin/bash

echo "标题:" 阅读标题 回声“” 直到 [ -n "$title" ] 做 echo "请输入标题:" 阅读标题 回声“” 完毕 回声“作者:” 阅读作者 回声“” 直到 [ -n "$author" ] 做 echo "请输入作者:" 阅读作者 回声“” 完成

检查=cat ./BookDB.txt | egrep -ie "\b""$title""\b" | egrep -ie "\b""$author""\b" 如果 [ -z "$check" ] 然后 echo "错误!书不存在!" #需要一些代码才能继续 别的 echo "找到书了!" 全部=cat ./BookDB.txt | grep -i "$title"

oldtitle=`echo "$all" | cut -d ":" -f1`
oldauthor=`echo "$all" | cut -d ":" -f2`
oldprice=`echo "$all" | cut -d ":" -f3`
oldavail=`echo "$all" | cut -d ":" -f4`
oldsold=`echo "$all" | cut -d ":" -f5`

fi 尽管 : 做 回声“” echo "a) 更新标题" echo " b) 更新作者" echo "c) 更新价格" echo " d) 更新可用数量" echo " e) 更新售出数量" echo " f) 返回主菜单" 回声“” echo -n "请输入您的选择:" 阅读选项

case $option in a ) echo -n "New title: " read newtitle if [ "$oldtitle" = "$newtitle" ] then echo "Title is the same as original" else all_title=`cut -f 1 -d ":" ./BookDB.txt` check=`echo "$all_title" | grep -i "\b""$newtitle""\b"` fi if [ -n "$check" ] then echo "Book title already exists." else sed -i "s/$oldtitle:/$newtitle:/g" ./BookDB.txt echo "Book title successfully updated." fi b ) esac done

我无法在 bash 上运行此代码。他们说我在这一行的 CASE 选择存在语法错误 b)

我觉得一点问题都没有

【问题讨论】:

尝试减少问题...创建一个最小的示例... all=cat ./BookDB.txt | grep -i "$title" 非常可疑。与缺少;;case 无关,但我认为您的意思是:all=$(grep -i "$title" ./BookDB.txt)。该行上方还有另一个更大的示例。 【参考方案1】:

使用case语句时,每个子句都需要以;;结束:

case $option in 
    a )
        # do something
        ;;
    b )
        # do something
        ;;
esac

您可以阅读here 了解有关案例声明的更多详细信息。

【讨论】:

正确!非常感谢您在该链接上的指南

以上是关于bash switch-case 语句给出语法错误的主要内容,如果未能解决你的问题,请参考以下文章

PHP PDO准备语句给出“无效语法”错误[重复]

带有子查询的准备好的语句给出语法错误[关闭]

[bash case语句语法使用扩展模式匹配

INSERT INTO 语句中的语法错误,没有给出其他详细信息

字符串作为switch语句[重复]

Switch-case语句