You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本定义time函数报错`syntax error near unexpected token ')'`求助

解决Bash脚本中syntax error near unexpected token ')'的问题

核心错误原因

你遇到的语法错误是因为**time是Bash的内置命令**,用来统计命令执行耗时,不能直接用它作为自定义函数名。Bash解析时会把time (){判定为非法语法,因此抛出错误。

修复步骤及其他问题修正

除了函数名冲突,脚本里还有几处语法和逻辑问题,一起修正如下:

  1. 重命名冲突函数
    将time函数改为非内置命令的名称,比如time_to_minutes:
time_to_minutes (){
    local hour="$1"
    local minute="$2"
    hour=${hour#0}  # 去除小时前的前导0,比如把"08"转为"8"
    minute=${minute#0}
    echo $((hour * 60 + minute))   
}
  1. 修正变量赋值语法
    start函数里的$hour=${hour/:/ }是错误写法,变量赋值时不能在变量名前加$,应改为:
hour=${hour/:/ }
  1. 修正日期格式错误
    H_now=date +%H:M``里的分钟格式符写错了,正确格式应为%M,同时建议用$(...)代替反引号(可读性更强):
H_now=$(date +%H:%M)
  1. 简化循环逻辑
    原脚本的while循环里重复判断时间条件,容易导致逻辑冗余,可简化为只在循环内更新当前时间并判断。

修复后的完整脚本

#!/bin/bash
time_to_minutes (){
    local hour="$1"
    local minute="$2"
    hour=${hour#0}
    minute=${minute#0}
    echo $((hour * 60 + minute))   
}

start (){
    # 获取当前时间并转为分钟数
    H_now=$(date +%H:%M)
    H_now=${H_now/:/ }
    sum_now=$(time_to_minutes $H_now)
    
    # 读取用户输入的定时时间
    read -p "Enter hour and minute the time, you want to start download:(hint: hour:minute)" target_time
    target_time=${target_time/:/ }
    sum_target=$(time_to_minutes $target_time)
    
    # 循环等待直到到达目标时间
    while [ "$sum_now" -ne "$sum_target" ]; do
        sleep 2
        # 更新当前时间的分钟数
        H_now=$(date +%H:%M)
        H_now=${H_now/:/ }
        sum_now=$(time_to_minutes $H_now)
    done
    
    # 到达时间后执行下载
    echo "********************"
    echo "Download Started"
    echo "********************"                                          
    wget "https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz"   
}

# 调用start函数启动脚本
start

额外说明

  • 用-ne(数值不等于)代替!=来比较分钟数,更符合Bash的数值比较规范
  • 将用户输入变量名改为target_time,避免和函数内的hour变量混淆,提升代码可读性
  • 添加了start函数的调用语句,原脚本未触发函数执行

内容的提问来源于stack exchange,提问作者Sadegh_Ghaffarian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 01:45:27