您的位置:首页 > 运维架构 > Shell

shell 循环中使用管道符的变量问题

2010-01-28 16:25 519 查看
在shell中,管道里边改变量是无效的。
脚本一:

#!/bin/bash
number=0
cat file | while read line;do
echo $line
((number+=1))
echo "number1=$number" //循环内输出number值
done

echo "number2=$number" //循环外取得number值

输出结果
number1=9
number2=0

可以用另一种方法
脚本二:

#!/bin/bash
number=0
while read line;do
echo $line
((number+=1))
echo "number1=$number"
done < file
echo "number2=$number"

输出结果
number1=9
number2=9

这次number赋值在循环外就生效了。

脚本练习

#!/bin/bash
cd /home/sum/maillist/sendmail
mailfile=`date +%Y%m%d%H`
export s=0
export f=0
export sum=0
for filename in *
do
if [ ! -s $filename ]
then
echo "delete $filename" >> /home/sum/shell/sendmail.log
rm -rf $filename
else
tmpfile=`cat /home/sum/shell/email_temp.html`
while read line
do
str1=`echo $line |awk -F "#" '{print $2}'`
str2=`echo $line |awk -F "#" '{print $3}'`
str3=`echo $line |awk -F "#" '{print $4}'`
str4=`echo $line |awk -F "#" '{print $5}'`
mailuser=`echo $line|awk -F "#" '{print $6}'`
tmp=`echo $tmpfile|sed -e "s/#1#/${str1}/g"`
tmp=`echo $tmp | sed -e "s/#2#/${str2}/g"`
tmp=`echo $tmp | sed -e "s/#3#/${str3}/g"`
tmp=`echo $tmp | sed -e "s/#4#/${str4}/g"`
echo $mailuser >> /home/sum/shell/sendmail.log
/usr/local/bin/sendEmail -f xxx@126.com -t "$mailuser" -s maiil.126.com -u "回答您的提问" -xu xxx@126.com -xp 111111 -m "$tmp" -o message-charset=GB2312 >> /home/sum/shell/sendmail.log
num=`echo $?`
if [ $num -eq 0 ];then
((s=s+1))
else
((f=f+1))
echo "mail false user:$mailuser" >> /home/sum/shell/sendmail_false.log
fi
((sum=sum+1))
sleep 5s
done < $filename
rm -rf /home/sum/maillist/sendmail/$mailfile
fi
done
echo "sucess mail:$s"
echo "false mail:$f"
echo "total send mail:$sum"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: