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[@]}"
使用数组意味着您可以正确处理名称中的空格,而简单字符串则不能。
我想运行 不同参数的脚本,如果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[@]}"
使用数组意味着您可以正确处理名称中的空格,而简单字符串则不能。