我在unix中创建了一个sh脚本,它基本上编译通过参数指定的程序,例如:sh shellFile cprogram.c,并为编译后的程序提供各种输入文件。
这些输入文件是在unix中创建的,我已经测试过了,我对这些结果很满意。我甚至用unix中的输入文件测试过它,这些文件的末尾甚至有一个额外的回车,但是我得到了很好的结果,让我们将这个测试文件命名为00ecr以供参考。如果我在windows中创建了一个测试文件并将其传输到unix,那么这个新的测试文件(我们称之为00wind)可能会在我的shell程序中产生不好的结果。
这只是一个理论问题。我只是想知道它是否会把事情搞砸,即使我用unix中的文件测试了shell脚本,这些文件解释了额外的回车?

最佳答案

在脚本中,使用linux命令file来确定文件是否具有windows风格的行结束符,如何:

$file test.txt
test.txt: ASCII text, with CRLF line terminators

所以脚本可以有如下转换函数:
#!/bin/bash

windows_file=`file $1 | grep CRLF`

if [[ -z "$windows_file" ]]; then
    echo "File already in unix format"
else
    # file need converting
    dos2unix $1
    echo "Converted a windows file"
fi

所以在这里,我们首先使用file实用程序输出文件类型和grepCRLF字符串,以查看文件是否需要转换。如果不是windows格式,grep将返回null,我们可以使用if [[ -z "$var" ]]语句测试空字符串。
然后使用dos2unix实用程序来转换它:
$ dos2unix test.txt
dos2unix: converting file test.txt to Unix format ...
$ file test.txt
test.txt: ASCII text

这样你就可以确保你的输入总是被“消毒”的。

10-07 19:10
查看更多