Compilation error character is missing-unix shell script

stime=12
etime=13
date=2014-11-24

awk -v a="$stime" -v b="$etime" -v d="$date" -F "[: ]+" '
  { 
  if ( $1 == d && $2+0 >= a && $2+0 < b )
      print $1,$2,$3
  }'  logfile.txt

Это дает результат:

2014-11-24 12 58
2014-11-24 12 58

Примечания:

  1. FS = "[:];" устанавливает разделитель полей в виде двоеточия или пробела, за которым следует точка с запятой. Эта комбинация никогда не встречается во входном файле.

  2. В исходном коде присвоение d = '$ date _'; привело к d , имеющему значение 1979 . Это связано с тем, что при введении в код awk выражение 2014-11-24 интерпретируется как числовое выражение, требующее вычитания.

  3. Рекомендуется передавать переменные оболочки в awk с помощью параметра -v . И оболочка, и awk могут требовать правильного заключения в кавычки, а опция -v позволяет нам решать эти вопросы по очереди.

  4. awk может выполнять числовое или буквенное сравнение в зависимости от контекста. Добавляя +0 в код, мы гарантируем, что awk выполняет числовое сравнение.

4
26.11.2018, 01:10
1 ответ

В вашем сценарии,

cd /$UBCS
if [ -f /$UBM/CSUSER.LOCKED -o -f /$UBM/CSUSER.START]
     -o f /$UBM/CSUSER.UPDATE ];
then
   exit;
fi

есть синтаксическая ошибка. Вы несбалансировали [...] в операторе if. Вам также понадобится пробел между / $ UBM / CSUSER.START и следующим ] .

#!/bin/sh

cd "/$UBCS" || exit 1

if [ -f "/$UBM/CSUSER.LOCKED" ] ||
   [ -f "/$UBM/CSUSER.START"  ] ||
   [ -f "/$UBM/CSUSER.UPDATE" ]
then
   exit
fi

Попробуйте вставить свои сценарии в ShellCheck: https://www.shellcheck.net/

Кроме того, вы не получите ошибок компиляции для сценариев оболочки (поскольку они не составлено). Это ошибки синтаксического анализа .

1
27.01.2020, 21:01

Теги

Похожие вопросы