2015-08-28 137 views
0

我已经制作了一个能够完成我所要做的90%的脚本。它进入一个目录(根据输入的日期),它改变我送入数组的文件。但是,我想将此脚本更改为还包含日期数组(这是目录名称)。它将在目录中循环,当它从文件名数组中找到一个文件时,它会纠正它并继续前进,直到所有文件都得到纠正。我已经尝试了几个不同的版本,但我不确定如何在文件更正后如何实现第二个数组以继续查看目录。如何使用shell脚本查看目录和更改文件?

目前,我的剧本是这样的:

debug=false 

## *****Put file name in quotes****** 
declare -a arr=("UF19905217" "UG19905218") 

##Put date in DDMMYYYY format for the date the message was original processed. 
DATE="25082015" 

## now loop through the above array 
for i in "${arr[@]}" 
do 
    #if "$debug; then 
     echo "Fix file named: Inbound_$i.msg" 
     MSG="Inbound_$i.msg" 
    #fi 

    if [ ! -d "$MSG" ]; then 
    # Enter what you would like changed here. You can copy and paste this command for multiple changes 

     #DATATYPE 
     printf "%s\n" ',s/<DataType>EDI<\/DataType>/<DataType>830<\/DataType>/g' wq | ed -s /data1/Inbound/$DATE/$MSG   

     echo "Complete" 
    else 
      echo "Message not found or errored!" 
    fi 

done 

我感谢所有帮助您可以提供。谢谢。

+1

没见过'ed'。尼斯。 – chepner

回答

1

我相信你只是想附上你有循环的一个循环,在希望的目录遍历:在使用了一段时间

debug=false 

## *****Put file name in quotes****** 
declare -a arr=("UF19905217" "UG19905218") 

##Put date in DDMMYYYY format for the date the message was original processed. 
dates=(25082015 26082015) 

for DATE in "${dates[@]}"; do  
    for i in "${arr[@]}"; do 
    MSG="Inbound_$i.msg" 
    if $debug; then 
     echo "Fix file named: $MSG" 
    fi 

    if [ ! -d "$MSG" ]; then 
     printf "%s\n" ',s/<DataType>EDI<\/DataType>/<DataType>830<\/DataType>/g' wq | ed -s /data1/Inbound/$DATE/$MSG 
     echo "Complete" 
    else 
     echo "Message not found or errored!" 
    fi 
    done 
done 
+0

这个伎俩。谢谢! – FrankCapone