gpt4 book ai didi

linux - 如何计算目录中的文件数并在 if 语句中进行测试?

转载 作者:太空宇宙 更新时间:2023-11-04 04:51:47 25 4
gpt4 key购买 nike

请记住,我对 bash 非常陌生(大约 3 天),我正在尝试计算特定目录中的文件数量并检查是否有超过 5 个文件,但是当我运行下面的代码时,我收到一个值类型不匹配错误,并且我不知道如何修复它或运行完成相同操作的不同代码。有什么提示或修复吗?

我尝试通过数学方程重新分配变量来转换变量我也尝试过搜索类似的东西,但找不到任何东西

cd /mnt/Backlog/MSFB #Change into directory to count files

backupCount= find . -type f | wc -l #Count files and store in a variable

if [ backupCount -ge 5 ];
then
echo "More than 5 archives found!"
else
echo "Testing"
fi

我想要的是 if 语句来检查 backupCount 的值,如果它高于 5 则显示一条消息(用于测试目的)我得到的是一个错误:backupCount:需要整数表达式

最佳答案

好吧,你已经到达那里了。为了将命令的结果保存为变量的内容,您可以使用命令替换,其形式为 var=$(command)。所以在你的情况下:

backupCount=$(find . -type f | wc -l) #Count files and store in a variable

为了引用存储在变量中的值,您必须通过在变量前面放置 '$'取消引用该变量,例如

if [ "$backupCount" -ge 5 ];

另请注意,使用 [ ... ] 时,必须用双引号引用变量。

(注意:您收到错误“需要整数表达式”,因为您使用 -ge 比较在 [ ... ] 内有 backCount,并且 bash 不知道 backupCount 是什么,因为它尚未取消引用,与使用 dogs -ge 5 相同,bash 不知道 “dogs” 是什么> 因此它会抛出错误“需要整数表达式”)

您还可以使用 POSIX 算术运算符 (( ... )) 进行比较,例如

if (( backupCount > 5 ));

((...)) 中,您不需要 '$' 符号来取消引用变量。

您还希望在脚本中的任何关键步骤中包含验证。例如,当您更改目录时,您想知道您已成功更改目录。您可以简单地执行以下操作:

cd /mnt/Backlog/MSFB || exit 1

失败时立即退出,或者您可以添加错误消息来告诉您失败的原因,例如

cd /mnt/Backlog/MSFB || {
printf "error: failed to change to /mnt/Backlog/MSFB\n" >&2
exit 1
}

>&2printf 的输出定向到 stderr 而不是 stdout。错误消息通常显示在 stderr 上。 (如果我们需要进一步备份 1 步,则您有 3 个主要流:stdin(输入 - 0)、stdout(输出 - 1)和 stderr(错误 - 2))。

关于linux - 如何计算目录中的文件数并在 if 语句中进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56179236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com