Bash 将秒转换为天小时分钟秒
在执行代码的以下部分时,我得到了错误:语法错误:预期的操作数(错误标记为“/(60*60*24)” 以下是我得到的错误: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)”
(标准)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,而不是POSIXsh
这并没有回答您为什么会出现这些错误的问题。答案由给出。此答案为您提供了实现目标的另一种方法
# 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你确定吗?我链接到的源代码似乎说,(…)
在POSIXsh
中无效(或者更确切地说,是指其他东西-子shell中的子shell).@tripleee subshell在一个不是C的子shell中,问题的格式也不是很好。请转到@kvantour你确定吗?我链接到的源代码似乎说(…)
在POSIXsh
中无效(或者更确切地说,是指其他东西-子shell中的子shell)“@tripleee subshell在subshell中可能也看到你是正确的,我的错误。()可能也看到你是正确的,我的错误。()不使用%j
的另一个好理由是,一旦超过1年,它就不起作用。不使用%j
的另一个好理由是,一旦超过1年,它就不起作用。