Variável indefinida

2

Estou tentando usar este script:

#!/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

mas sempre que recebo esta mensagem de erro:

1
1
SUB: Undefined variable.

e eu não sei porque.

    
por Manal Os 29.03.2017 / 15:40

2 respostas

5

Além de todos os motivos, scripts não devem ser escritos em csh , você estão misturando sintaxe bash e sintaxe csh em seu script.

Você está iniciando o loop com csh foreach e tentando finalizá-los com bash done . A saída de loop para um csh foreach é end , não done . Além disso, você tem uma variável VISIT que está chamando $VIS em sua instrução grep.

Assim, o seu script estaria sintaticamente correto em csh com:

#!/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

ou no 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

EDIT 2017/04/03

Aqui está uma versão do script bash que adiciona um teste para o arquivo:

#!/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
    
por 29.03.2017 / 16:02
0

Sua mensagem de erro não corresponde ao código que você está mostrando. $ SUB é uma variável bem definida e o csh não irá fazer isso. Em vez disso, o csh irá emitir o erro "concluído: comando não encontrado" que você deveria ter. Tem certeza de que você copiou e colou a mensagem correta?

    
por 29.03.2017 / 16:24

Tags