我需要检查bash脚本中的给定字符串是否是命令。 换句话说:我需要检查该String是否是/ bin目录中的文件名(仅/ bin)。
我试过
echo "Write a bash command: "
read -r var2
if [[ -z (find /bin -name $var2) ]]
then echo "That's not a command" && exit 1
fi
但它没有用。
想法?
编辑:解决了。正如amdixon建议我为$(find / bin -name $ var2)更改了(find / bin -name $ var2)。谢谢老兄。
答案 0 :(得分:1)
根据您的实际要求,它可能比那更容易:
if ! [ -x /bin/"$var2" ]
then
echo "That's not a command" && exit 1
fi
[
是test
命令的缩写,对于-x
参数,如果给定的文件可由您执行,它将返回0
(true)。请注意,这将排除其他用户可执行的命令,因为您没有足够的权限。
如果使用-f
参数,[
将测试/bin
目录中的任何文件,无论它是否可执行(当然通常都是):
if ! [ -f /bin/"$var2" ]
then
echo "That's not a command" && exit 1
fi
如果您需要确保该文件是可执行的(即使它可能无法执行),请参阅this question以获取使用file
的解决方案。
在命令行上键入help test
以阅读有关[
的可能参数的更多信息。
答案 1 :(得分:0)
echo "Write a bash command: "
read -r var2
if [ ! -f /bin/"$var2" ]
then echo "That's not a command" && exit 1
fi
是在bash中执行此操作的自然方式。 [ expr ]
是内置test
命令的简写。输入人builtins
并滚动,直至找到test
,以获得test
可以为您做的完整说明。例如,如果您希望同时测试文件是否存在且可执行,则可以替换:
[ ! -f /bin/"$var2" ]
由:
[ ! -x /bin/"$var2" ]
答案 2 :(得分:0)
我需要检查bash脚本中的给定字符串是否为命令。
VS
我需要检查该String是否是/ bin目录中的文件名(仅/ bin)。
这绝不是相同。我想你提到众所周知的“shell命令”,在这种情况下,你可能有三个错误的原因:
lvm
或cryptsetup
)考虑到所有这些,如果您仍想在/ bin中查找可执行文件,则根本没有理由使用find
。 test
(或简写版本只是写括号)就足够了,比如if [ -x /bin/$var2 ]; then
......