gpt4 book ai didi

linux - 使用 case 语句时出现 bash 语法错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:20 24 4
gpt4 key购买 nike

我有一个 bash 脚本,我在工作中经常使用它来自动化大型工作。我今天做了一些改变,但一切似乎都很好。脚本本身大约有 1700 行长。脚本的第一部分都很好,可以很好地贯穿所有用户输入和逻辑。然后它进入脚本的核心并在第 875 行停止工作(使用 bash -x 测试脚本以找到断点)。但是,它因以下错误而中断:

script.sh: line 1341: syntax error near unexpected token `;;'
script.sh: line 1341: ` ;;'

第 1341 行位于 case 语句的中间。以下代码是该代码块中断处的开头:

if [[ $VAR1 = "TRUE"  && $VAR2 = "VAL2" ]]; then
VERSION=`XXXXXXXXXXXXXXXX`
## Set variables based on location $VAR3
case $VAR3 in
STR1 )
case $VERSION in
STR2 )
VAR4 = "STR5"
VAR5 = "STR6"
VAR6 = "STR7"
VAR7 = "STR8"
Line 1341 ---> ;;
STR3 )
VAR4="STR9"
VAR5="STR10"
VAR6="STR11"
VAR7="STR12"
;;
STR4 )
VAR4="STR13"
VAR5="STR14"
VAR6="STR15"
VAR7="STR16"
;;
esac
VAR8="STR17"
VAR9="STR18"
VAR10=1
VAR11="STR19"
;;

由于我所做工作的敏感性,我显然不得不删除相当多的信息。我知道这可能会使帮助我的事情变得更加困难。但是,所有 VAR##="STR##"都是带有字符串值的标准变量声明,没有什么特别的(没有变量替换等)。所有变量稍后都会在脚本中使用。 VERSION 的代码返回一个字符串值,该值在嵌套的 case 中使用。

在我今天进行更改之前,该脚本一直运行良好,但除了调整一些 STR 值外,我真的没有触及这一部分。我尝试在引号“”中设置 $VAR3$VERSION 变量,以及用作案例的 STR 值。我尝试完全取出这个 block ,只是让它在下一个 block 上失败(STR1 具有不同的值,因此更改了变量声明)。我将它输出到控制台它在做什么,并在大多数功能后检查错误。控制台上没有任何异常,错误日志中也没有任何异常。

如有任何帮助,我们将不胜感激,而且我知道我的要求很多。

顺便说一句,这里是脚本停止运行的第 875 行附近的代码(根据此处的代码没有生成错误)。同样,使用 bash -x 我可以看到 VAR2 变量已设置,但脚本在下一个 for 循环开始之前中断。

## Create file ##
echo 'Creating files . . . '
j=0
p=1111
if [ $VAR1 = "TRUE" ]
then
VAR2=1
else
VAR2=2
fi
for i in `seq 1 $HOWMANY`; do <----Line 875
echo -n "Creating file . . . "
echo "XXXXXXXXXXX

再次感谢。

最佳答案

问题可能出现在第 875 行(或更早一点)和第 1341 行之间的某个位置。它可能是错误的引用或不太微妙的内容。如果没有这些行之间的所有原始 Material ,我们基本上不可能进行调试。

建议 1:使用“bash -n -v”运行,看看是否能让您深入了解问题。

建议 2:将脚本拆分成更易于管理的更小的部分 - 并且可以单独调试。我拥有的最大脚本(在我的 bin 目录中有 400 个脚本)来自 autoconf 套件——它们的重量不到 1100 行;下一个最大的是我的,750 行的脚本太大了。d..n。下一个最大的脚本是 600 到 700 行 Perl(包括 Perl 文档)。


说完“遗漏引号”后,我看到您靠近第 875 行的片段有:

echo -n "Creating file . . . "
echo "XXXXXXXXXXX

第二个 echo 中缺少右双引号。


您还提到了进行更改,尽管还没有接近脚本中断的程度。由于您的代码处于版本控制之下(您不会梦想在没有备份的情况下使用 1700 行脚本,对吗?),您应该再次查看实际更改。

或者甚至回到以前的工作版本,然后再次进行更改,一次一个,仔细地,直到你明白为什么你破坏了某些东西。

关于linux - 使用 case 语句时出现 bash 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3818763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com