【发布时间】:2020-06-01 14:32:04
【问题描述】:
问题陈述 使用 bash 脚本查找文件 在本节中,您将在脚本目录中编写一个名为 findJane.sh 的脚本。
此脚本应捕获所有“jane”行并将它们存储在另一个名为 oldFiles.txt 的文本文件中。您将使用我们在前面部分中练习的命令来完成脚本。别担心,我们会全程指导您。
导航到 /scripts 目录并创建一个名为 findJane.sh 的新文件。
我的代码
#!/bin/bash
>oldFiles.txt
files=$(grep " jane " ../data/list.txt | cut -d ' ' -f 3)
for i in $files:do
do if test -e ~/data/"$i"; then
echo "$i" >> OldFiles.txt;
else
echo "File doesn't exist"; fi
done
现在输出 文件不存在 文件不存在 文件不存在 它不应该打印任何东西 并且 cat oldFiles.txt 应该返回所有名称为 'jane
的文件我在哪里编码错误
指南 创建文本文件 oldFiles.txt 并确保它为空。这个 oldFiles.txt 文件应该使用用户名“jane”保存文件。
现在,搜索所有包含名称“jane”的行并将文件名保存到变量中。我们称这个变量为文件,我们稍后会在实验室中使用该名称来引用它。
由于文件 list.txt 中的所有文件都不存在于文件系统中,因此请检查 files 变量中存在的文件名是否实际存在于文件系统中。为此,我们将使用我们在上一节中练习的测试命令。
现在,遍历 files 变量并在循环中添加一个测试表达式。如果 files 变量中的项目通过测试,请将其添加/附加到文件 oldFiles.txt。
【问题讨论】:
-
对于初学者,您需要将设置
files的命令括起来,所以files=$(...)。然后,使用-l或--files-with-matches选项来获取文件名。即使这样,如果文件名中有空格,for循环也会拆分文件名。 (在文件名中添加该空格的人应被指控行为不合人情。) -
@Jack 只是一个新手请详细说明,你的讽刺很强烈:)。寻找一个明确的答案。
-
先尝试修复
files=$(grep...)行。 -
你在正确的轨道上。修复 shellcheck.net 未解决的语法错误。当您在那里发帖时,请务必使用
#!/bin/bash作为第一行(您缺少#字符)。如果修复语法错误不能解决您的问题,请使用更新的代码编辑您的 Q,这样人们就不会浪费时间评论简单的修复。包括生成的任何错误消息的确切文本。祝你好运。 -
正如我所说,你不需要
| cut ...的所有东西。只需在grep上使用-l选项。