检查文件是否存在 [BASH]

2024-03-28

如何检查 bash 中文件是否存在?

当我尝试这样做时:

FILE1="${@:$OPTIND:1}"
if [ ! -e "$FILE1" ]
then 
    echo "requested file doesn't exist" >&2
    exit 1
elif
<more code follows>

我总是得到以下输出:

 requested file doesn't exist

该程序的使用方式如下:

script.sh [-g] [-p] [-r FUNCTION_ID|-d FUNCTION_ID] FILE

有什么想法吗? 我将很高兴提供任何帮助。

附:我希望我可以展示整个文件,而不用担心因为有副本而被学校开除。如果有私人的沟通方式,我会很乐意帮忙。

我的错。 Fas 将二进制文件强制放入错误的位置。感谢大家的帮助。


调试此类问题的小技巧。将这些行添加到脚本的顶部:

export PS4="\$LINENO: "
set -xv

The set -xv将在执行之前打印出每一行,然后在 shell 插入变量等后打印该行。$PS4是使用的提示符set -xv。这将在执行时打印 shell 脚本的行号。您将能够跟踪正在发生的事情以及可能遇到问题的地方。

这是测试脚本的示例:

#! /bin/bash

export PS4="\$LINENO: "
set -xv

FILE1="${@:$OPTIND:1}"         # Line 6
if [ ! -e "$FILE1" ]           # Line 7
then 
    echo "requested file doesn't exist" >&2
    exit 1
else
    echo "Found File $FILE1"   # Line 12
fi

这是我运行它时得到的结果:

$ ./test.sh .profile
    FILE1="${@:$OPTIND:1}"
6: FILE1=.profile
    if [ ! -e "$FILE1" ]
    then 
        echo "requested file doesn't exist" >&2
        exit 1
    else
        echo "Found File $FILE1"
    fi
7: [ ! -e .profile ]
12: echo 'Found File .profile'
Found File .profile

在这里,我可以看到我设置了$FILE1 to .profile,并且我的脚本理解这一点${@:$OPTIND:1}。最好的事情是它适用于所有 shell,直到原始的 Bourne shell。这意味着,如果您没有像您想象的那样运行 Bash,您将看到脚本失败的地方,并可能解决问题。

我怀疑您可能没有在 Bash 中运行脚本。你有没有放#! /bin/bash在顶端?


script.sh [-g] [-p] [-r FUNCTION_ID|-d FUNCTION_ID] 文件

您可能想使用getopts解析你的参数:

#! /bin/bash

USAGE=" Usage:
    script.sh [-g] [-p] [-r FUNCTION_ID|-d FUNCTION_ID] FILE
"
while getopts gpr:d: option
do
    case $option in
        g)  g_opt=1;;
        p)  p_opt=1;;
        r)  rfunction_id="$OPTARG";;
        d)  dfunction_id="$OPTARG";;
        [?])
            echo "Invalid Usage" 1>&2
            echo "$USAGE"        1>&2
            exit 2
            ;;
    esac
done

if [[ -n $rfunction_id && -n $dfunction_id ]]
then
    echo "Invalid Usage: You can't specify both -r and -d" 1>&2
    echo "$USAGE" >2&
    exit 2
fi

shift $(($OPTIND - 1))
[[ -n $g_opt ]] && echo "-g was set"
[[ -n $p_opt ]] && echo "-p was set"
[[ -n $rfunction_id ]] && echo "-r was set to $rfunction_id"
[[ -n $dfunction_id ]] && echo "-d was set to $dfunction_id"
[[ -n $1 ]] && echo "File is $1"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查文件是否存在 [BASH] 的相关文章

  • 如何理解批处理文件?

    我之前没有使用批处理文件或 shell 脚本的经验 我需要了解相关项目中使用的批处理文件所执行的操作 有没有资源提供批处理文件命令的详尽列表以及每个命令的作用 一旦您熟悉了一般的 BAT 文件信息 使用其他用户在其他答案中发布的一些有用信息
  • getopts 未提供参数

    如何检查是否没有提供必需的参数 我发现 switch case 中的 选项应该足以达到此目的 但它永远不会进入该 case 代码块 我是否将 冒号大小写 放在开头或其他位置并不重要 我的代码 while getopts a b OPTION
  • “: ${foo=value}”中冒号运算符的解释

    我理解 bash 中的冒号运算符的作用类似于a null http devmanual gentoo org tools reference bash index html multiple selection 我知道它用在参数扩展 htt
  • Snakemake 声明规则以非零退出代码退出,即使使用“|| true”?

    我的 Snakemake 管道断言 每当我运行任何规则时 我的代码都会引发非零退出代码 即使我的代码在我手动运行相同的代码时返回错误代码 0 并且在 Snakemake 中运行时它可以正常工作 根据建议这个问题 https stackove
  • 如何从纯文本中查找键值存储中的值

    给定一个纯文本文件 其中包含 FOO foo BAR bar BAZ baz 我们如何grep使用键获取值 Use a 向后看 https regex101 com r q3FNpe 1 grep Po lt FOO w file foo
  • 添加新的 ApplicationBarMenuItem 图标时无法分配给属性

    我添加了一个新的ApplicationBarMenu带有图标的按钮到我的 wp7 项目中的页面 当尝试运行页面时我得到 无法分配给属性 Microsoft Phone Shell ApplicationBarIconButton Click
  • 空格分隔值;如何提供包含空格的值

    我正在创建一个 bash 脚本来通过以下方式配置多个 Azure 资源Azure CLI https learn microsoft com en us cli azure view azure cli latest 到目前为止一切顺利 但
  • 如何将一个目录中的所有文件移动到多个具有给定文件数量的目录中?

    我有一个包含超过 27000 张图像的目录 我想将这些文件分成文件夹 每个文件夹包含大约 500 张图像 它们如何排序并不重要 我只是想将它们分开 一个 简单 的 find xargs 就可以了 find maxdepth 1 type f
  • 如何在节点中转义 shell 命令的字符串?

    In nodejs http nodejs org 执行外部命令的唯一方法是通过 sys exec cmd 我想调用外部命令并通过标准输入为其提供数据 在nodejs中 似乎还没有一种方法可以打开命令 然后将数据推送到它 仅执行并接收其标准
  • 创建 QT 应用程序作为 Windows 上现有基于控制台的应用程序的 GUI

    我正在尝试使用 Qt 为现有应用程序设置一个 GUI 该应用程序旨在在 Windows 命令行中运行 这不仅仅是运行应用程序system 命令 但我需要通过命令行与现有应用程序交互 The system 当我启动现有的可执行文件时 命令会阻
  • “sed” 在文件中插入反斜杠

    Tool Windows 版 Git Bash Problem 尝试在目录中每个文件的顶部插入文本 connectcentral Code for f in DIR sql do sed i 1i connect central f don
  • shell - temp IFS 仅作为换行符。为什么这不起作用: IFS=$(echo -e '\n')

    我正在尝试使用for在 shell 中迭代带有空格的文件名 我读过一个堆栈溢出问题 https stackoverflow com questions 4128235 bash shell scripting what is the exa
  • Git:确定分支是否处于合并冲突状态

    我正在编写一个 bash 脚本来进行一些自动化操作 该脚本的一部分涉及导航到本地存储库 切换到本地 master 分支 然后拉取远程 master 以使用最新代码更新本地 master 分支 有谁知道是否有一种方法可以以编程方式确定拉取是否
  • awk 排序多维数组[重复]

    这个问题在这里已经有答案了 GNU awk 支持多维数组 gnu org software gawk manual gawk Arrays of Arrays q 1 1 dog q 1 2 999 q 2 1 mouse q 2 2 77
  • 如何让“wc -l”只打印没有文件名的行数?

    wc l file txt 输出行数和文件名 我只需要数字本身 而不是文件名 我可以做这个 wc l file txt awk print 1 但也许有更好的方法 试试这个方法 wc l lt file txt
  • 对 shell 变量中的单引号进行转义

    我编写了一个 Bash 脚本来将值插入到SQLite https en wikipedia org wiki SQLite数据库 命令如下 sqlite3 db name insert into table name column1 col
  • 如何使用AWK从文件中连续输出行

    我有一个多行文件 我想连续输出文件的某些行 比如第一次 从第1行打印到第5行 下次 打印第2行到第6行 依此类推 我发现 AWK 是一个非常有用的函数 我尝试自己编写代码 但它什么也没输出 以下是我的代码 bin bash for n in
  • 是否可以在我的 shell 文件中使用 GitHub 机密?

    这是我在 GitHub 存储库上的简单操作 name CI on push branches main jobs build runs on ubuntu latest steps name Get my account my infra
  • 如何重新安装最新的cmake版本?

    我想在Linux环境下安装cmake的最新版本 我安装了 cmake 3 5 版 但某些应用程序不支持 我尝试通过卸载当前版本来升级它 但是当我使用 sudo apt get install cmake 重新安装时 我重新安装了相同的版本
  • Shell 脚本对文件进行计数,然后删除最旧的文件

    我是 shell 脚本新手 所以我需要一些帮助 我有一个充满备份的目录 如果我有超过 10 个备份文件 我想删除最旧的文件 以便仅留下 10 个最新的备份文件 到目前为止 我知道如何计算文件数 这看起来很简单 但是如果计数超过 10 我该如

随机推荐

  • 如何在 conda 环境中启动 exe

    我在 Windows 10 中使用 vscode 作为代码编辑器 并希望找到一种简单的方法来使用正确的 conda env 启动它以进行调试 目前 我必须打开命令提示符 然后激活 conda env 然后将 vscode 的快捷方式粘贴到提
  • 直接渲染CGImage(而不是UIImage)?

    我正在做一个CGImage func otf gt CGImage 这是渐变上的贝塞尔蒙版 所以 the path let p UIBezierPath p moveTo etc the mask let m CAShapeLayer se
  • Crystal Reports 10 命令对象更改数据源位置

    我已经在 Crystal Report 中使用了命令对象 现在我需要更改数据源 我已按照知识库文章 c2016958 中的说明进行操作 下载 解压缩并应用了 cr10win en zip 和 dbex10win en zip 但我的连接仍然
  • 访问reactjs中的viewbag属性

    我正在开发一个Web应用程序 我使用reactjs和MVC c 我想知道 jsx 是否包含在 cshtml 中 是否可以访问 jsx 中的 viewbag 属性 我想要将一个对象或 id 传递给 jsx 并将其呈现在 UI 中 ViewBa
  • 如何制作单独的角材料步进器标题和内容?

    我正在用有角度的材料做一个垂直步进器 问题是这个步进器将每个步骤的内容放在步骤标题下方 因此如果有很多步骤 它看起来会很糟糕 因为你必须滚动 我的想法是将标题与内容分开 这样它看起来更像是侧导航 但具有角度材质功能 这是我现在所拥有的 内容
  • 从 Java Applet 调用 Javascript 函数

    我在 HTML 页面中有一个 Java Applet 我需要让小程序调用某个 Javascript 函数来通知 HTML 页面某些事件 我目前调用 JavaScript 函数的方式是 getAppletContext showDocumen
  • Clojure 哈希映射到 xml

    我正在尝试将以下映射转换为 xml 任何具有向量值的键都需要为向量中的每个元素重复 xml 中的键 use clojure xml defn map to xml2 k v cond nil k for e a v tag e conten
  • 使用 DatabaseMetaData 检索 mysql 表注释

    因此 我正在将 Vaadin Java Web 框架用于需要编辑表的功能的项目 Vaadin 提供了一种获取方法Connection对象来自SimpleJDBCConnectionPool 这是 API https vaadin com a
  • XSLT - 从模板中删除空格

    我正在使用 XML 存储一个小型联系人列表 并尝试编写一个 XSL 模板将其转换为 CSV 文件 我遇到的问题是输出中存在空格 输出 Friend John Smith Home 123 test Sebastopol California
  • 在 Matlab 中向量化数组索引/取子集

    假设我有一个长数据向量 y 加上一些索引 我想在每个索引周围提取一个简短的片段或窗口 例如 假设我想构建一个矩阵 其中每个小于 3 的值之前包含 64 个样本 之后包含 64 个样本 这在 for 循环中很简单 WIN SIZE 64 Sa
  • 监视器应该等待什么对象?

    使用 Monitor Wait object obj 时 应该对 obj 使用什么 在这个article http www yoda arachsys com csharp threads 我正在阅读 NET 中的多线程 作者实例化了一个新
  • ASP.NET Core 1.0 - MVC 6 - Cookie 过期

    UPDATE 这绝对不是 RC1 中的错误 cookie 设置与默认的 UserManager 和 UserStore 一起使用 因此它一定与我的 UserManager UserStore 有关 我已经监督过 我基本上使用这里的实现 ht
  • 对数据帧的每一行应用函数并同时递增计数器

    我知道我可以使用apply 在数据帧的每一行上应用函数 如下所示 import pandas as pd df pd DataFrame Name A B C Number 1 2 3 def func row pass df apply
  • 将 Azure 网站连接到 Xero 合作伙伴应用程序

    我正在将我的应用程序与 Xero 集成 这需要两个证书 我在以下人员的帮助下将它们上传到 Azurethis https azure microsoft com en us blog using certificates in azure
  • HTML 使文本可点击,而不使其成为超链接

    我想添加这样的功能 可以选择单击某些 HTML 文本并执行正确的 JavaScript 代码 我怎样才能做到这一点 对于语义我会使用
  • AWS ECR CF 模板失败并显示“提供的存储库策略无效”

    此 CF 模板失败 MyECSrepo Type AWS ECR Repository Properties RepositoryName Ref RepoName RepositoryPolicyText Version 2012 10
  • Shiny - 到 mainPanel 的多个输出

    Shiny 似乎只接受任何提供给的最终输出mainPanel in ui R An 较早的问题 https stackoverflow com questions 22996434 adding more than one graph to
  • 在 Firefox 中使用 -moz-transform 选择框焦点错误

    我注意到 如果我在 Firefox 中对选择框焦点 即 select focus 应用变换 它首先会聚焦选择框 然后您必须再次单击选择框才能真正下拉 还有其他人经历过这个吗 我尝试在 Mozilla 上寻找错误 但没有发现任何东西 Webk
  • 使用 Rails 包括对儿童的条件

    我有一个模型Parent有很多孩子Child 我想要获取所有父模型并展示每个Child也是父母的 这是 Rails 的经典用例includes方法 据我所知 但是 我无法让 Rails 在不将父模型限制为具有子模型的情况下向子模型添加条件
  • 检查文件是否存在 [BASH]

    如何检查 bash 中文件是否存在 当我尝试这样做时 FILE1 OPTIND 1 if e FILE1 then echo requested file doesn t exist gt 2 exit 1 elif