gpt4 book ai didi

linux - 为什么这个 'syntax error' 在 'else' 之前?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:10 24 4
gpt4 key购买 nike

我正在编写一个 shell 脚本来解压缩目录中的文件。不同zip文件中存在同名文件;代码必须保留较大的那个。

我需要解压/test 目录中的文件。有数千个 zip 文件,我没有空间同时解压缩它们。所以我创建了一个文件夹/test/tmp 并将一个 zip 文件解压到该文件夹​​中。然后比较/test 和/test/tmp 文件夹中的文件。如果有重复的文件,比较它们的大小,将较大的文件保存在/test 中。如果没有重复,将文件从/test/tmp 移动到/tmp。

这是我的代码:

#!/bin/bash
A="/test"
B="/test/tmp"
archives=$(ls $A *.zip 2>/dev/null)
for archive in "${archives}"
do
mkdir -p "${B}" && unzip "${archive}" -d $B
for file_tmp in 'ls $B *.log 2>/dev/null'
do
file_root="${A}${file_tmp}"
if [-f "${file_root}"] then
if [[$(stat -c %s "${file_tmp}") -ge $(stat -c %s "${file_root}")]]
then mv "${file_tmp}" "${file_root}"
else rm "${file_tmp}"
fi
else mv "${file_tmp}" $A
fi
done
done

但是我一直报错

unziptest.sh: line 16: syntax error near unexpected token `else'
unziptest.sh: line 16: ` else mv "${file_tmp}" $A'

怎么了?

最佳答案

如果你打算使用单行,那么:

if [-f "${file_root}"] then

then之前必须有一个分号:

if [ -f "${file_root}" ]; then

您还需要命令名称 [ 周围的空格,以及 [ 命令的最后一个参数 ] 之前的空格。如果您使用 [[ 表示法,那么间距就不那么重要了。

关于linux - 为什么这个 'syntax error' 在 'else' 之前?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15737503/

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