1

我有一个简单的脚本 (timeconvert.sh) 将秒转换为 hh:mm:ss 格式并将其写入文件timeremain.out

#!/bin/bash
#convert sec to h:m:s
secs=${1:?}

h=$(( secs / 3600 ))
m=$(( ( secs / 60 ) % 60 ))
s=$(( secs % 60 ))

printf "%02d:%02d:%02d\n" $h $m $s > timeremain.out

我试图让它读取文件secremain.out作为脚本的输入,但以下都不起作用:

cat secremain.out | ./timeconvert.sh
./timeconvert.sh < secremain.out

任何人都可以建议使用正确的语法或编辑脚本以直接读取文件吗?

4

2 回答 2

2

您的脚本从中读取秒数,$1因此您可以在命令行中传递它们:

secs=$(cat secremain.out)
./timeconvert.sh $secs

# or

./timeconvert.sh $(cat secremain.out)

或者您可以将脚本更改为从标准输入读取:

#!/bin/bash
#convert sec to h:m:s
read secs

如果您执行后者,则它可以按照您编写的方式从文件中读取:

cat secremain.out | ./timeconvert.sh
./timeconvert.sh < secremain.out
于 2013-04-03T21:27:01.207 回答
0

有了这个脚本

:您既可以使用,也可以使用STDIN参数,脚本会自行检测上下文:

#!/bin/bash
#convert sec to h:m:s

if [[ -t 0 ]]; then
    secs=${1:?}
else
    read secs
fi

h=$(( secs / 3600 ))
m=$(( ( secs / 60 ) % 60 ))
s=$(( secs % 60 ))

printf "%02d:%02d:%02d\n" $h $m $s

使用示例

./script.sh 120

或者

echo 120 | ./script.sh
于 2013-04-03T21:46:59.477 回答