未定义的变量

未定义的变量

我正在尝试使用这个脚本:

#!/bin/csh
foreach SUB (1 2 3 4 5 6 7 8 9 10 11 12 13 14)
    echo $SUB
    foreach VISIT (1 2 3 4 5 6 7 8)
        echo $VISIT
        grep 'StudyDate' -f  /home/colourlab/Desktop/DrummingDTI/D${SUB}/D${SUB}V${VIS}/scout/001/infodump.dat
    done
done

但每次我收到此错误消息时:

1
1
SUB: Undefined variable.

我不知道为什么。

答案1

除了不应该编写脚本的所有原因csh,您在脚本中混合了 bash 语法和 csh 语法。

您正在以 开始循环csh foreach并尝试以 结束循环bash done。 a 的循环出口csh foreachend, 不是done。此外,您还有一个在 grep 语句中VISIT调用的变量。$VIS

因此,您的脚本在 csh 中在语法上是正确的:

#!/bin/csh
foreach SUB (1 2 3 4 5 6 7 8 9 10 11 12 13 14)
    echo $SUB
    foreach VISIT (1 2 3 4 5 6 7 8)
        echo $VISIT
        grep 'StudyDate' -f  /home/colourlab/Desktop/DrummingDTI/D${SUB}/D${SUB}V${VISIT}/scout/001/infodump.dat
    end
end

或者在bash中:

#!/bin/bash
for SUB in 1 2 3 4 5 6 7 8 9 10 11 12 13 14; do
    echo $SUB
    for VISIT in 1 2 3 4 5 6 7 8; do
        echo $VISIT
        grep 'StudyDate' -f  /home/colourlab/Desktop/DrummingDTI/D${SUB}/D${SUB}V${VISIT}/scout/001/infodump.dat
    done
done

编辑2017/04/03

这是 bash 脚本的一个版本,添加了对该文件的测试:

#!/bin/bash

idf_pfx="/home/colourlab/Desktop/DrummingDTI"
idf_sfx="scout/001/infodump.dat"

for SUB in 1 2 3 4 5 6 7 8 9 10 11 12 13 14; do
    echo $SUB
    for VISIT in 1 2 3 4 5 6 7 8; do
        echo $VISIT
        idfile="${idf_pfx}/D${SUB}/D${SUB}V${VISIT}/${idf_sfx}"
        if [ -f "${idfile}" ]; then
            grep 'StudyDate' $idfile
        else
            echo "No studydate file: $idfile"
        fi
    done
done

答案2

您的错误消息与您显示的代码不匹配。 $SUB 是一个定义明确的变量,csh 不会对它进行抄袭。相反,csh 会发出您应该得到的错误“完成:找不到命令”。您确定复制粘贴的消息正确吗?

相关内容