2013-12-19 3 views
1

В приведенном ниже скрипте RES всегда возвращается в нуль; Не уверен, что я делаю неправильно.Ошибка командной строки aix, возвращаемая функцией

Заранее спасибо.

#!/bin/sh 
set -x 
chk_for() { 
    RES=0 
    RES= $(head -1 $1 | fgrep -c "Formula" >&2) 
    echo "@@@@" || $RES 
    return $RES 
    } 

for X in /home/wstandke/webcatstats/rep/AnalysisWork/*; do 
    chk_for "$X" 

    if [$? == 1] 
     then 
      echo "1st line is heading" 
      file=$(basename $X) 
      echo "fullname=" || $X 
      echo "filename=" || $file 
      mv $X /tmp/$file 
      sed 1d /tmp/$file > $X 
      rm /tmp/$file 
    fi 
done 
cat /home/wstandke/webcatstats/rep/AnalysisWork/* >/tmp/Analysis.report 
+0

'Экс/#/bin/sh' почти наверняка оригинальный Bourne Shell, который не поддерживает' $ (cmd_substitution) '. Попробуйте удалить пробел, ниже, и вместо этого используйте 'backtics'. Также лучше всего понять, что обрабатывается, включить функции трассировки оболочки 'set -vx', чтобы увидеть переменные расширения по мере их появления. Удачи. – shellter

+1

@shelter Нет ... возможно, нет./bin/sh очень часто ksh./bin/bsh (как я помню) - это Bourne Shell. Насколько я помню, есть опция, чтобы установить его. Я считаю, что один из вариантов - даже установить его на ksh93. – pedz

ответ

2

Вы перенаправить вывод fgrep на stderr, таким образом, не назначая никакой ценности RES.

Кроме того, не уверен, что это проблема, но есть пробел после RES=, который может назначить поле пустым RES.

Попробуйте изменить линию в вопросе:

RES=$(head -1 $1 | fgrep -c "Formula") 
+0

+1 для пробела между значком равенства и назначаемым значением. –

Смежные вопросы