我是 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/