用于读取和写入文件的Shell脚本

时间:2016-12-22 07:53:54

标签: shell unix ksh

我有一个包含文件位置的脚本,我正在运行一个命令来修复文件。 但我无法将输出写入文件。

#!/bin/ksh
while read line
do
`shnfix "$line"` >> output.txt
done < filename.txt

在脚本开头添加set -x后生成的输出。

+ < filename.txt + read line + shnfix /x01/naveen_wav/file1.wav + >> output.txt Fixing [/x01/naveen_wav/file1.wav] (3:49.42) --> [file1-fixed.wav] : 100% OK Padded last file with 1194 zero-bytes. + read line + shnfix /x01/naveen_wav/file2.wav + >> output.txt Fixing [/x01/naveen_wav/file2.wav] (4:30.35) --> [file2-fixed.wav] : 100% OK Padded last file with 644 zero-bytes. + read line

3 个答案:

答案 0 :(得分:1)

@ gile代码的更高效版本(I / O):

#!/bin/ksh
filename="/path/to/filename.txt"
while IFS= read -r line
do
    shnfix "$line"
done < filename.txt > output.txt

答案 1 :(得分:0)

输出应该在`

`shnfix $line >> output.txt`

所以脚本可能是这样的:

#!/bin/ksh
filename="/path/to/filename.txt"
while IFS= read -r line
do
        # display line or do somthing on $line
        echo "$line"
        `shnfix $line >> output.txt`
done <"$fileName"

答案 2 :(得分:0)

只需删除反引号,它们至少会让人感到困惑。

写入,因为它将在子shell中执行命令并尝试执行结果,并向其添加重定向。
我假设你不想执行输出,但你想重定向输出。

如果输出以例如line开头,这是一个正确的unix命令,它不会创建输出,你看不到错误,但是没有输出。

我得到test.ksh[4]: line1: not found [No such file or directory],其中'line1'是我的测试文件中的第一行。

或者将其保存在一个块中并重定向它的所有输出。使意图更清晰,更容易添加提交。

#!/bin/ksh
filename="/path/to/filename.txt"
{
  while IFS= read -r line
  do
    shnfix "$line"
  done < "$filename"
} > output.txt

http://www.shellcheck.net(一个大问题排查工具)会给出类似的提示