file作为脚本的输入

时间:2013-04-03 21:24:30

标签: bash file input

我有一个简单的脚本(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

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

2 个答案:

答案 0 :(得分:2)

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

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

# or

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

或者您可以将脚本更改为从stdin中读取:

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

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

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

答案 1 :(得分: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