【发布时间】:2017-10-25 02:20:13
【问题描述】:
我是 Unix 的初学者。如果这个问题听起来太蹩脚,我很抱歉。
我将向变量fullstring=$1 传递一个参数。此变量的输入可能类似于这些选项,例如 tester.txt 或 tester.sh 或 testapiece.zip 或 testing.bad 或 *.* 基本上它类似于包含文件名通配符模式和文件类型的字符串.
在这里,我只需要从参数中传递的字符串中剪切文件类型,即基本上我需要从“。”中剪切字符串。直到最后,我需要将它与 IF 子句中的多个字符串进行比较。
代码结构大纲将类似于以下结构:
IF substring of variable(just the filetype in the variable) is not equals to any of the set of 4 predefined file type strings (txt,zip,csv,*)
THEN
ECHO "file is not in the required file type"
EXIT
ELSE
ECHO "file is in required file type"
FI
如果有人可以帮助我在 IF 子句中比较条件,那将会很有帮助。提前致谢。
注意:我们可以将文字 * 作为文件类型传递,它应该与 * 进行字面比较
【问题讨论】:
-
您可能需要基本名称而不是正则表达式。而且您绝对应该编写一个程序来尝试解决问题,然后在遇到问题时询问——stackoverflow 不是请求编写算法的平台。
-
你想用 Bash 写这个吗?别的壳?标签缺少一种语言。
-
我想用 KSH 写这段代码
-
嗨,斯科特·约翰逊,我很抱歉。它实际上是我编写的一个更大的代码,这个 IF 条件是我无法在其中实现的完整代码的一部分。我不确定我是否可以提供完整的代码。所以我只是提供了我正在寻找的更多细节。我肯定会尝试实现这一点,但无法修复它,因此请联系您的 stackoverflow 专家建议。谢谢
-
文件扩展名只是约定...文本文件不需要具有
.txt扩展名,.zip可能意味着不止一件事,等等. 您可以/应该先检查实际类型,如果需要,然后检查扩展名。您可以使用file --brief --mime <filename>获取 mime 类型 — 如果它显示“application/zip; charset=binary”,您并不真正关心扩展名是什么,但如果它显示“text/plain; charset=” " 你可能会关心它是 .csv还是.txt或者根本没有扩展名。