Bash:意外标记 `else' 附近的语法错误,使用 ssh 的 grep 终端

标签 bash if-statement ssh grep

我是 bash 的新手,所以这可能是一个简单的修复。我正在尝试编写一段代码,允许我检查作业何时在不同的服务器上完成。这是我拥有的当前代码块。

#!/bin/bash

boxes=(dm virgil alpha kolp law be corn zira)
Cyan='\033[0;36m'
NC='\033[0m' # No Color
for box in "${boxes[@]}"; do
    echo ""
    echo -e "${Cyan}${box}${NC}"
    ssh "${box}" "ls -ltr | tail -n 11 | tr -s ' ' | cut -d ' ' -f 6- "
done

echo "------------------------------------------------------------------------------"

这工作正常,并给出以下输出。
dm
Jan 13 08:47 Model_SNAr_smallbasisset_TCM.chk
Jan 14 09:57 Phoscat_SS_regioazid_subopt.com
Jan 14 09:57 Phoscat_SS_regioazid_subopt.log
Jan 14 09:57 Phoscat_SS_regioazid_subopt.csh
Jan 14 09:57 nohup.out
Feb 4 17:57 Model_SNAr_smallbasisset_wb97xd_sm.com
Feb 4 17:57 Model_SNAr_smallbasisset_b3lyp_sm.com
Feb 4 17:57 Model_SNAr_medbasisset_b3lyp_sm.com
Feb 4 17:58 Model_SNAr_smallbasisset_wb97xd_fp.com
Feb 4 17:58 Model_SNAr_smallbasisset_b3lyp_fp.com
Feb 4 17:58 Model_SNAr_medbasisset_b3lyp_fp.com

如您所见,这显示了所有文件,而我想将其缩小到某些文件扩展名,并有效地“grep termin [filename]”以确定作业是否正常完成。目前,我的脚本将显示任何已创建但不一定已完成的文件。

通过改变
"ls -ltr | ..."


"ls -ltr *.log *.out |"

我可以有选择地搜索文件扩展名,但是如果我在目录中没有该扩展名的任何文件,我会得到以下看起来很乱的东西,我想摆脱它。
zira
ls: cannot access *.log: No such file or directory
ls: cannot access *.out: No such file or directory

为了解决这个问题,我尝试使用 if..else 语句,但出现以下错误。
#!/bin/bash

DIR="/$HOME"
boxes=(dm virgil alpha kolp law be corn zira)
Cyan='\033[0;36m'
NC='\033[0m' # No Color
for box in "${boxes[@]}"; do
    ssh "${box}"
    if [ "$(ls -A $DIR)" ]; then
        for box in "${boxes[@]}"; do
            echo ""
            echo -e "${Cyan}${box}${NC}"
            ssh "${box}" "ls -ltr *.log *.out | tail -n 11 | tr -s ' ' | cut -d ' ' -f 6-"
    else
        echo ""
        fi

done

echo "------------------------------------------------------------------------------"


line 14: syntax error near unexpected token `else'
line 14: `    else'

我是否遗漏了一些简单的东西,我将如何合并“grep termin”样式命令?

谢谢,

卡尔

最佳答案

for缺少结束 done (应该在 else 之前)

关于Bash:意外标记 `else' 附近的语法错误,使用 ssh 的 grep 终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28769656/

相关文章:

JavaScript - 为什么 else 警报与 if 警报一起执行

ruby - 通过 SSH 使用 Ruby Grit 从 Git 存储库下载和修改文件

linux - 从另一个脚本运行 bash 脚本并在第二个脚本运行时退出第一个脚本

Bash 函数从 POSIX PATH 中删除重复项

mysql - 为什么 IF..NOT IN(subquery) THEN 不能与 MySQL 一起使用?

python - 投票 If/Else/Elif

github 使用智能 HTTP

c# - 自动化长时间的 SSH session

bash - Unix 循环变量

linux - 如何避免kill命令输出消息?