下面的代码只是我想要做的一个粗略的概述。在评估每个案例之后,不要担心代码在做什么。
我的问题是,在这种情况下*','* )
,我试图识别用逗号分隔的文件的动态模式。
例如: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
我应该补充一点,该程序应该根据其扩展名列出一组文件,然后允许用户获取所有这些文件,或者选择多个(或单个)文件。因为我不知道用户要输入什么,所以我试图匹配模式而不是静态输入。
所以这就是我的新代码的样子,并且更接近我想要完成的任务:
让我们专注于案件,以免混淆。
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]
在找到一个给我线索的链接后,我想通了: 如何测试变量是否是 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],*
(我仍然必须确保没有输入无效字符,但是,它确实减少了我现在必须做的工作。)
感谢您尝试帮助“其他人”。