下面的代码只是我想要做的大致概述。在评估每个案例后,不要担心代码在做什么。
我的问题是,*','* )
我试图识别用逗号分隔的文件的动态模式。
Ex: getfile.sh -fileextension file1,file2,file3,file4 将是我的输入。我如何认识到来自$ 2的输入(这等于var2)遵循*','*
模式,其中*代表文件?
if [ $flag -eq 1 ]; then
case $var2 in
#lists files if option is selected
list | l | LIST | L | ls | LS) do stuff here
all | a | ALL | A) do stuff here
*','* ) do stuff here
* ) do stuff here
esac
fi
我应该补充一点,程序应该根据它们的扩展名列出一组文件,然后允许用户获取所有这些文件,或者选择mutliple(或单个)文件。因为我不知道用户要输入什么,我试图匹配模式而不是静态输入。
所以这就是我的新代码的样子,并且更接近我想要实现的目标:
让我们专注于案件,以免混淆。
case $var2 in
#lists files if option is selected
list | l | LIST | L | ls | LS) ls -1 $DIRECTORY*$extension
exit
;;
#copy all files in the directory
all | a | ALL | A)
echo ">Cleaning temp dir"
allcheck=1
cleantemp
copy
zip
exit
;;
[0-9][0-9a-zA-Z] | [0-9]','[0-9a-zA-Z]) echo "this is valid input"
exit
;;
* )
echo ">>Bad argument"
#help
exit 1
#fi
esac
这是我想要匹配的模式
[0-9]','[0-9a-zA-Z]
我找到一个给我一个线索的链接后想出来了: How do I test if a variable is a number in Bash?
无论如何,这是我最终的结果:
case $var2 in
#lists files if option is selected
list | l | LIST | L | ls | LS) ls -1 $DIRECTORY*$extension
exit
;;
#copy all files in the directory
all | a | ALL | A)
echo ">Cleaning temp dir"
allcheck=1
cleantemp
copy
zip
exit
;;
[0-9][0-9a-zA-Z] | [0-9][0-9a-zA-Z],[0-9][0-9a-zA-Z],*) echo "this is valid input"
exit
;;
* )
echo ">>Bad argument"
#help
exit 1
#fi
esac
此测试适用于输入,如56或5A [0-9][0-9a-zA-Z]
此测试用于输入,用逗号分隔,例如我尝试完成的操作。 [0-9][0-9a-zA-Z],[0-9][0-9a-zA-Z],*
(我仍然需要确保没有输入无效字符,但是,它确实减少了我现在必须做的工作。)
感谢您试图帮助“另一个人”。
答案 0 :(得分:0)
您的代码正确匹配包含逗号的var2
值:
flag=1
var2="file1,file2,file3,file4"
if [ $flag -eq 1 ]; then
case $var2 in
#lists files if option is selected
list | l | LIST | L | ls | LS) stuff here ;;
all | a | ALL | A) stuff here ;;
*','* ) echo "It works" ;;
* ) stuff here ;;
esac
fi
将打印“It works”。
如果问题是如何分隔逗号分隔列表,则可以使用
IFS=","
for file in $var2
do
echo "Processing $file"
done