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"
脚本一:
#!/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"
相关文章推荐
- shell 使用管道符时变量的问题
- shell 使用管道符时变量的问题
- shell中使用while循环ssh时只循环第一行的问题解决
- 使用 let 解决for 循环闭包 i变量问题
- linux使用c shell 、b shell 环境变量的问题
- shell 循环变量传递问题
- shell scripts for 循环中变量赋值 以及 shell中sed的使用
- 内外循环使用同名变量问题
- 管道下while循环中定义的变量在退出while循环时引用为空的问题
- shell下在while循环中使用ssh命令的问题
- Shell脚本基础 、 使用变量 、 条件测试及选择 、 列表式循环
- shell 数字循环中变量的使用
- awk使用shell变量问题
- 使用shell全局变量出现的问题
- Shell编程中使用管道循环中无法改变外部变量的解决办法
- 浅谈shell循环中变量的作用域问题
- C++在多线程中使用UINT做循环判断变量的不确定性问题
- Dom动态添加事件,不能使用循环变量的问题
- velocity模板里循环使用set null给临时变量的问题
- shell脚本中使用了管道符,导致变量赋值丢失的原因