linux - Shell 括号和引号

标签 linux shell

<分区>

find /ABC/ \
    -type f \
    -exec \
    sh -c  ' if [  echo "1" > ${1} ] ; then   if [ "$(cat ${1})" != "1" ]; then [ echo ${1} ]  ; fi ; fi ' _ {} \;

我的脚本想要这样做:

查找文件夹中的所有文件。将 1 写入文件。检查“1”是否写错。打印此文件的名称。

之前。我做了这两个步骤。 (1) 写入 (2) 读取检查。 现在我将这两个结合在一起。因为我想在写入一个文件后立即检查。

但是我的脚本现在有问题了。 需要帮忙。 谢谢。 它给出了我的错误:

sh: 1: unknown operand

我猜有些东西不匹配/因为我对 shell 没有经验。需要你们帮忙

最佳答案

if [  echo "1" > ${1} ] ; then

[ 是一个普通的命令。它是几乎所有 sh 中的内置函数,但仍能正常解析。所以 > ${1} 的意思是“将输出重定向到名称作为参数传递的文件”。如果要比较两个数字,请使用 -gt 运算符:

if [ 1 -gt "$1" ]; then …

如果你想将 1 写入文件,使用 echo 命令,而不是 [ … ] 这是条件命令(也可以在名称 test 下调用):

if echo 1 >"$1"; then …

请注意,如果 echo 1 >"$1" 成功,那么该文件很可能确实包含您放置在那里的文本。唯一不会发生这种情况的情况是:

  • 如果 $1 是一个特殊文件,例如管道或设备(这不会发生,因为它们不会被 -type f 匹配);<
  • 如果生活在一个特殊的文件系统上,您从文件中读取的内容不是最后写入的内容——这将是一个奇怪的文件系统,而不是用于磁盘存储的文件系统;
  • 如果其他程序在此期间修改了文件,由于时间窗口小,这不太可能,但并非不可能。

关于linux - Shell 括号和引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11979128/

相关文章:

shell - 不关闭ssh

linux - 为 SSH 远程命令全局配置 PATH

android - 使用 uinput 模拟多点触控事件

linux - 在 TEdit 中注册输入(Delphi/Free pascal)

Linux 导出命令语法

mysql - 通过bash获取MYSQL数据库信息

Linux 作为 USB UVC 设备

linux - QT 维护工具在 Linux 上的文件路径位置是什么?

linux - 修剪 ';' 并按 ":"拆分

linux - 为什么在存在目标的情况下,bash 中的否定文件存在检查会返回奇怪的结果?