bash在case语句中传递参数对

crcmnpdw  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(483)

我试图找到一种有效的方法来循环一个基于一对参数的动作,例如(a,b,c,d,e,f…等等)和(1,2,3,4,5,。。。。。等等)。脚本应该在给定的文件文件夹中循环,查找匹配的文件名并采取相应的操作。但是,$dir1,$dir2,$dir3…等没有基于文件名的固定命名模式,我可以为每个循环动态生成。我有一个预定义的文件名字符串列表,以及它们对应的hdfs文件夹位置。
有人能帮我提出一个更好的方法,这样我就可以在一个循环中执行相同的操作,而不是重写每个案例的公共操作吗?
下面是一个示例伪代码段。
示例输入文件及其相应的目录:

BATMAN_JOKER_SUPERMAN.txt >>>  $dir1  
BATMAN_HARLEYQUIN_SUPERMAN.txt >>> $dir2  
BATMAN_DEADSHOT_SUPERMAN.txt>>> $dir3

假设声明了所有变量

for filename in $(ls $home_dir| grep $ProcessDate | grep global)  
do 
    fname=$(sed 's|`\(.*BATMAN_ *\)\(.*\)\( *_SUPERMAN.*\)$|\2|g' <<< $filename)  
    case "$fname" in  
    JOKER) 
    #lots of actions that are common to each file  
    hadoop fs -copyFromLocal $filename $dir1  
    ;;  
    HARLEYQUIN)  
    #lots of actions that are common to each file  
    hadoop fs -copyFromLocal $filename $dir2  
    ;;  
    DEADSHOT)  
    #lots of actions that are common to each file  
    hadoop fs -copyFromLocal $filename $dir3  
    ;;  
esac  
done;
wkyowqbh

wkyowqbh1#

你可以这样试试

case "$fname" in
  *JOKER*)
    ...
  ;;
  *HARLEYQUIN*)
    ...
  ;;
  *DEADSHOT*)
    ...
  ;;
esac

相关问题