gpt4 book ai didi

bash 在 case 语句中传递参数对

转载 作者:可可西里 更新时间:2023-11-01 15:51:49 26 4
gpt4 key购买 nike

我正在尝试找到一种有效的方法来根据一对参数循环操作,例如(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;

最佳答案

你可以这样试试

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

关于bash 在 case 语句中传递参数对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48566546/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com