Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 将秒转换为天小时分钟秒_Bash_Time_Sh - Fatal编程技术网

Bash 将秒转换为天小时分钟秒

Bash 将秒转换为天小时分钟秒,bash,time,sh,Bash,Time,Sh,在执行代码的以下部分时,我得到了错误:语法错误:预期的操作数(错误标记为“/(60*60*24)” 以下是我得到的错误: (标准)1:语法错误 表达式:语法错误 服务器迁移完成的估计时间:- ./migration.sh:第983行:(:d=/(60*60*24):语法错误:应为操作数(错误标记为“/(60*60*24)”) ./migration.sh:第984行:(:h=((((60*60*24))/(60*60):语法错误:应为操作数(错误标记为“%(60*60*24))/(60*60)”

在执行代码的以下部分时,我得到了错误:语法错误:预期的操作数(错误标记为“/(60*60*24)”

以下是我得到的错误:

(标准)1:语法错误
表达式:语法错误
服务器迁移完成的估计时间:-
./migration.sh:第983行:(:d=/(60*60*24):语法错误:应为操作数(错误标记为“/(60*60*24)”)
./migration.sh:第984行:(:h=((((60*60*24))/(60*60):语法错误:应为操作数(错误标记为“%(60*60*24))/(60*60)”)
./migration.sh:第985行:(:m=(((60*60))/60:语法错误:应为操作数(错误标记为“%(60*60))/60”)
./migration.sh:第986行:(:s=%60:语法错误:应为操作数(错误标记为“%60”)
00天00小时00分00秒

在纯
sh
中,仅用双括号不足以选择算术上下文

# don't use non-portable "function" keyword
convertsecs2dhms () {
    # use $((...)) for arithmetic
    d=$((${1}/(60*60*24)))
    h=$(((${1}%(60*60*24))/(60*60)))
    m=$(((${1}%(60*60))/60))
    s=$((${1}%60))
    # use printf -v
    printf -v printValue "%02d days %02d hours %02d minutes %02d seconds \n" $d $h $m $s
    printInfo "$printValue"
}

另请参见,但请注意,其中大部分描述的是Bash,而不是POSIX
sh

仅用双括号不足以在纯
sh
中选择算术上下文

# don't use non-portable "function" keyword
convertsecs2dhms () {
    # use $((...)) for arithmetic
    d=$((${1}/(60*60*24)))
    h=$(((${1}%(60*60*24))/(60*60)))
    m=$(((${1}%(60*60))/60))
    s=$((${1}%60))
    # use printf -v
    printf -v printValue "%02d days %02d hours %02d minutes %02d seconds \n" $d $h $m $s
    printInfo "$printValue"
}

另请参见,但请注意,其中大部分描述的是Bash,而不是POSIX
sh

这并没有回答您为什么会出现这些错误的问题。答案由给出。此答案为您提供了实现目标的另一种方法

# don't use non-portable "function" keyword
convertsecs2dhms () {
    # use $((...)) for arithmetic
    d=$((${1}/(60*60*24)))
    h=$(((${1}%(60*60*24))/(60*60)))
    m=$(((${1}%(60*60))/60))
    s=$((${1}%60))
    # use printf -v
    printf -v printValue "%02d days %02d hours %02d minutes %02d seconds \n" $d $h $m $s
    printInfo "$printValue"
}
您可能感兴趣的是
date
命令的用法

convertsec2dhms () {
   date -d "@$1" "+$(($1/86400)) days and %H hours %M minutes %S seconds";
}
为了得到天数,我们用86400秒进行整数除法。小时、分钟和秒是通过date命令获得的,假设时间以UNIX时间给出(即自1970-01-01T00:00:00起的秒)

注意:您不能使用年度计算日(
%j
),因为这会给您额外的一天(1月1日是第1天,而不是第0天)


这并不能回答您为什么会有这些错误。答案由给出。此答案为您提供了实现目标的替代方法

您可能感兴趣的是
date
命令的用法

convertsec2dhms () {
   date -d "@$1" "+$(($1/86400)) days and %H hours %M minutes %S seconds";
}
为了得到天数,我们用86400秒进行整数除法。小时、分钟和秒是通过date命令获得的,假设时间以UNIX时间给出(即自1970-01-01T00:00:00起的秒)

注意:您不能使用年度计算日(
%j
),因为这会给您额外的一天(1月1日是第1天,而不是第0天)


这不是C,问题的格式也不是很好。请转到。@kvantour你确定吗?我链接到的源代码似乎说,
(…)
在POSIX
sh
中无效(或者更确切地说,是指其他东西-子shell中的子shell).@tripleee subshell在一个不是C的子shell中,问题的格式也不是很好。请转到@kvantour你确定吗?我链接到的源代码似乎说
(…)
在POSIX
sh
中无效(或者更确切地说,是指其他东西-子shell中的子shell)“@tripleee subshell在subshell中可能也看到你是正确的,我的错误。()可能也看到你是正确的,我的错误。()不使用
%j
的另一个好理由是,一旦超过1年,它就不起作用。不使用
%j
的另一个好理由是,一旦超过1年,它就不起作用。