“语法错误:意外的文件结束”简单脚本

“语法错误:意外的文件结束”简单脚本

我需要一些帮助来编写一个非常简单的脚本,我不知道错误出在哪里。脚本:

#!/bin/bash

declare -i s
declare -i m
declare -i h

if [ "$3" < 50 ]; then s=$3+10  m=$2  h=$1
        else if ["$2" < 50 ];
                then s=$3-50  m=$2+1  h=$1
                    else s=$1-50  m=$2-50  h=$1+1 fi 
fi 

echo "$h:$m:$s"

该脚本将我们输入的时间添加 10sc。

我收到此错误消息:“sub_change_dirrect:第 14 行:语法错误:文件意外结束”

答案1

有三个明显的错误:

  • 在行 上else s=$1-50 m=$2-50 h=$1+1 fi,该单词fi不被视为关键字,因为它不是命令中的第一个单词。对于 shell,这看起来像是应用于命令 的三个赋值fi。如果您曾经执行过此行,则会看到错误bash: fi: command not found。将其放在fi自己的一行上(或;在其前面放一个)。
  • [ "$3" < 50 ]等同于[ "$3" ] < 50— 它是命令[ … ](也可以写成test),带有唯一参数"$3",以及来自文件的输入重定向50。可以使用数字比较运算符-lt,也可以使用算术指令(( … ))。单括号结构是普通的内置命令,因此特殊字符(例如)<保留其正常含义。双括号结构是特殊语法,您可以<在其中用作数字比较运算符。
  • ["$2" < 50 ]左括号后缺少一个空格。

then此外,shell 脚本中的通常惯例是在和之后放置换行符else。此外,您不应使用else完全由语句组成的块if,而应使用elif。并且请一致缩进。

#!/bin/bash
declare -i s
declare -i m
declare -i h

if (( $3 < 50 )); then
  s=$3+10  m=$2  h=$1
elif (( $2 < 50 )); then
  s=$3-50  m=$2+1  h=$1
else
  s=$1-50  m=$2-50  h=$1+1
fi 

echo "$h:$m:$s"

PS 我还没有检查过你的逻辑。你似乎在寻找date +%T -d 'now + 10 seconds'

答案2

你忘记在;嵌套fi语句后面添加

#!/bin/bash

declare -i s
declare -i m
declare -i h

if [ "$3" < 50 ]; then s=$3+10  m=$2  h=$1
        else if ["$2" < 50 ];
                then s=$3-50  m=$2+1  h=$1
                    else s=$1-50  m=$2-50  h=$1+1 ;fi 
fi 

echo "$h:$m:$s"

相关内容