如何在if条件中调用带有参数的外部bash函数



我试图在主脚本中的if条件下调用外部bash脚本。外部脚本IsArchive:

的代码
#!/bin/bash
STR="$1"
if [[ "$STR" ==  *".zip"* ]] || [[ "$STR" ==  *".iso"* ]] || [[ "$STR" ==  *".tar.gxz"* ]] || [[ "$STR" ==  *".tar.gx"* ]] || [[ "$STR" ==  *".tar.bz2"* ]] || 
[[ "$STR" ==  *".tar.gz"* ]] || [[ "$STR" ==  *".tar.xz"* ]] || [[ "$STR" ==  *".tgz"* ]] || [[ "$STR" ==  *".tbz2"* ]]
then
return 0
else 
return 1
fi

,我试着在我的主脚本中调用它:

elif [[ $Option = "2" ]]
then
if IsArchive "$SourcePath";
then
less -1Ras "$SourcePath" | tee "$OutputFilePath"
#if file is not an archive
else
ls -1Rasl "$SourcePath" | tee "$OutputFilePath"
fi

当我执行主脚本,我收到错误:./script: line 61: IsArchive: command not found

您只需要确保脚本位于您的PATH中。或者用完整路径或相对路径引用它。也许你只需要写:

if ./IsArchive "$SourcePath"; then ...

但是IsArchive有几个问题。你不能return,除非从一个函数,所以你可能想要使用exit 0exit 1而不是return。您可能不希望将foo.zipadeedoodah这样的名称视为存档,但是*".zip"*将与之匹配,因此您可能应该删除末尾的*。用case语句来写会更简单:

#!/bin/bash
case "$1" in
*.zip|*.iso|*.tar.gxz|*.tar.gx|*.tar.bz2| 
*.tar.gz|*.tar.xz|*.tgz|*.tbz2) exit 0;;
*) exit 1;;
esac

相关内容

  • 没有找到相关文章

最新更新