Scripting

未定義的變數

  • August 22, 2019

我正在嘗試使用此腳本:

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

我不知道為什麼。

除了不應該編寫腳本的所有原因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

引用自:https://unix.stackexchange.com/questions/354584