Unix — 运行 当文件的 wc 不匹配时一个脚本

Unix — run one script when wc of the file not matched

我想运行 不同参数的脚本,如果wc 文本文件匹配或不匹配!

我的脚本:

#!/bin/sh
x= echo `wc -l "/scc/ftp/mrdr_rpt/yet_to_load.txt"`
if [ $x -gt 0 ]
then
sh /scc/ftp/mrdr_rpt/eam.ksh /scc/ftp/mrdr_rpt/vinu_mrdr_rpt.txt /scc/ftp/mrdr_rpt/yet_to_load.txt from@from.com to.name@to.com
elif
sh /scc/ftp/mrdr_rpt/eam.ksh /scc/ftp/mrdr_rpt/vinu_mrdr_rpt.txt /scc/ftp/mrdr_rpt/yet_to_load.txt from@from.com to.name@to.com, hi.name@hi.com
fi

您需要准确捕获 wc 的输出,并且需要避免在其输出中获取文件名。你有:

x= echo `wc -l "/scc/ftp/mrdr_rpt/yet_to_load.txt"`
if [ $x -gt 0 ]

=后面的space是错误的。 echo 是不需要的。您应该使用带有 wc 的输入重定向。 (wc 有点奇怪。如果你给它一个文件名来处理,它会在输出中包含文件名;如果你让它处理标准输入,它不会在输出中包含文件名。 ) 你应该使用 $(…) 而不是反引号。

x=$(wc -l < "/scc/ftp/mrdr_rpt/yet_to_load.txt")
if [ $x -gt 0 ]

如果你想检查文件是否不为空(而不是一个有数据但没有换行符的文件),那么你可以使用更直接的测试:

if [ -s "/scc/ftp/mrdr_rpt/yet_to_load.txt" ]

您可能应该使用

这样的名称
DIR="/scc/ftp/mrdr_rpt"

然后引用它以减少代码中难看的重复:

if [ $x -gt 0 ]
then
    sh "$DIR/eam.ksh" "$DIR/vinu_mrdr_rpt.txt" "$DIR/yet_to_load.txt" \
        from@from.com to.name@to.com
else
    sh "$DIR/eam.ksh" "$DIR/vinu_mrdr_rpt.txt" "$DIR/yet_to_load.txt" \
        from@from.com to.name@to.com, hi.name@hi.com
fi

但是,我认为第二行的逗号可能不需要,使用:

可能会更好
who="from@from.com to.name@to.com"
if [ -s "$DIR/yet_to_load.txt" ]
then who="$who hi.name@hi.com"
fi

sh "$DIR/eam.ksh" "$DIR/vinu_mrdr_rpt.txt" "$DIR/yet_to_load.txt" $who

那么您只有一行,其中包含所有名称。你可能会用数组而不是字符串做得更好:

who=("from@from.com" "to.name@to.com")
if [ -s "$DIR/yet_to_load.txt" ]
then who+=("$who hi.name@hi.com" "Firstname Lastname <someone@example.com>")
fi

sh "$DIR/eam.ksh" "$DIR/vinu_mrdr_rpt.txt" "$DIR/yet_to_load.txt" "${who[@]}"

使用数组意味着您可以正确处理名称中的空格,而简单字符串则不能。