子Shell 之 管道和重定向

2019-04-26 0 By admin

在shell 编程中,我们有时会使用到while 读取按行读取文件中的数据。使用的方法有管道符和重定向。

一、管道符

cat ${date_minutes}|while read minute
do
size_access=`grep ${minute} ${log_dir_parrent}${log_file}_${dt} |awk -F" " '{print $10}' |awk '{sum+=$1} END {print sum}'`
total_size=$(($total_size+$size_access))
insertToMySQL ${log_format} ${size_access:=0} ${minute} 0
echo ${total_size}
done

二、重定向

while read minute
do
size_access=`grep ${minute} ${log_dir_parrent}${log_file}_${dt} |awk -F" " '{print $10}' |awk '{sum+=$1} END {print sum}'`
insertToMySQL ${log_format} ${size_access:=0} ${minute} 0
total_size=$(($total_size+$size_access))
done < ${date_minutes}
insertToMySQL ${log_format} ${total_size:=0} "2019:00:00:*" 1

三、重定向是内建命令,而管道符是非内建命令

Linux 在执行Shell 时,会创建“子shell”运行shell中的命令,当运行到非内建指令时,会创建“孙shell”运行非内建指令。
变量的作用域在每个shell中有效;所以,非内建指令中定义的这些变量就只能在孙shell运行,而在子shell中不生效。