如果文本文件的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
答案 0 :(得分:1)
您需要准确捕获wc
的输出,并且需要避免在其输出中获取文件名。你有:
x= echo `wc -l "/scc/ftp/mrdr_rpt/yet_to_load.txt"`
if [ $x -gt 0 ]
=
之后的空格是错误的。不需要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[@]}"
使用数组意味着你可以正确地处理名称中的空格,而简单的字符串并不是这样。