我需要一些帮助来编写一个非常简单的脚本,我不知道错误出在哪里。脚本:
#!/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"