我正在为我制作的虚拟机构建一个操作系统,虽然进展顺利,但我已经在一个应该非常简单的问题上停留了好几个小时:我正在设计一种目录导航方法,而我可以下拉到子目录,我在返回其父目录时遇到一些问题。我需要 bash 脚本仅当目录中的字符数至少达到一定长度时才允许返回父目录,以便在以下情况下不允许从虚拟机的文件系统上方导航到虚拟机的主机 FS 或系统目录:在用户模式下,但在根模式下允许两者(为了管理其中有第二个脚本工作正常。)。
因此,这是我到目前为止所尝试的,问题是两个脚本最终都执行相同的操作:即使向上导航一个目录,也只会返回“文件系统根目录没有父目录”,而不是返回到用户模式根目录进入常规根目录。
#!/bin/bash dir=$(cat '/system/framework/usrDirectory') 父目录 =“$(目录名“$dir”)” echo $parentdir > '/system/framework/parentToCheck' validCheck=$(cat "/system/framework/parentToCheck") 有效=${#vaidCheck} 有效长度=46 如果 [[ $valid == $validLength ]] 然后 echo $parentdir > '/system/framework/usrDirectory' 否则如果 [[ $valid < $validLength ]] 然后 echo -e "\n\n文件系统根目录没有父目录!" 菲 菲也:
#!/bin/bash dir=$(cat '/system/framework/usrDirectory') 父目录 =“$(目录名“$dir”)” echo $parentdir > '/system/framework/parentToCheck' validCheck=$(cat "/system/framework/parentToCheck") 有效=${#vaidCheck} 有效长度=46 如果 [[ $valid == $validLength ]] 然后 echo -e "\n\n文件系统根目录没有父目录!" 别的 echo $parentdir > '/system/framework/usrDirectory' 菲
注意:是的,它确实说validLength
变量的值为 46,并且该脚本中的目录没有那么多字符长,这是因为这是一个私有化虚拟机,并且用户模式旨在安全地锁定对其父级中所有内容的访问目录,时期。因此我不想在这里显示用户模式根目录的完整路径。尽管如此,用户模式根目录的路径确实包含 46 个字符,因此我认为没有理由这不起作用。
答案1
简单回答一下标题中提出的问题:
if [[ "$foo" -lt "$bar" ]]; then
echo "$foo is less than $bar"
fi
整数比较的测试是:
n1 -eq n2 True if the integers n1 and n2 are algebraically equal.
n1 -ne n2 True if the integers n1 and n2 are not algebraically equal.
n1 -gt n2 True if the integer n1 is algebraically greater than the
integer n2.
n1 -ge n2 True if the integer n1 is algebraically greater than or
equal to the integer n2.
n1 -lt n2 True if the integer n1 is algebraically less than the inte-
ger n2.
n1 -le n2 True if the integer n1 is algebraically less than or equal
to the integer n2.
使用例如<
or>
进行 ASCII 顺序比较,所以[[ 0100 < 100 ]]
将是正确的。
答案2
好吧,我纠正了拼写错误,这肯定破坏了程序,并且我修复了运算符的语法,也肯定破坏了它。然而(这可能看起来很荒谬),一旦我纠正了这些问题,我手动执行操作valid=${#validCheck}
来测试字符串的长度,以防万一,发现目录的长度实际上是 45 个字符,而不是 46。我觉得自己很聪明,对吧现在,但我很高兴问题已经解决,我可以继续处理更紧迫的职能。感谢你们对我的拼写错误的更正,也感谢理查德对 chroot 监狱工具的建议。