Как сделать оператор if not в оболочке (/bin/sh )?

Просто попытка Не лучший подход

for ((i=1;i<=3;i++));  do awk -v i="$i" 'NR==i{gsub("&","\n",$0);print $0}' o.txt| sed "s/=.*/=FUZZ/g"| sed "N;s/\n/\&/g"|sed "N;s/\n/\&/g"; done

выход

http://example.com/mall/mall/detail3.jsp?proID=FUZZ
http://example.com/mall/member/member/bookshelves/add.jsp?proID=FUZZ&productName=FUZZ
http://example.com/mall/bestbookTW//mall/detail3.jsp?proID=FUZZ&c=FUZZ&id=FUZZ
3
13.04.2020, 06:53
2 ответа

В вашем регулярном выражении используется синтаксис PCRE, подобный \d, ноgrep -E(это то же, что и ваше egrep, но вместо этого используйте grep -E, egrepустарело )не понимает этого. Кроме того, вам не нужны круглые скобки, вы на самом деле ничего не фиксируете. Если у вас GNU grep, вы можете использовать grep -Pвместо:

grep -Pqv 'Android-\d{3,4}.{20,}'

Если нет, вам придется заменить \dна[0-9]:

grep -Eqv 'Android-[0-9]{3,4}.{20,}' 

Тем не менее, вам не нужно (или хотите, чтобы )брал только первую строку файла, вы можете просто выполнить grep для всего файла напрямую. Вам также не нужно переворачивать совпадение (-v), что только усложняет ситуацию. Вот более простая рабочая версия вашего скрипта, использующая if !для отмены условия:

#!/bin/sh
if ! grep -E 'Android-[0-9]{3,4}.{20,}' "$1"; then
  printf "[Message Format] Your message is not formatted correctly. Correct message format: 
    #Ticket Number - Minimum 20 or more Character 
    like #Android-123 Bug fixed for login issue\n"
  exit 1;
fi
6
19.03.2021, 02:29

Вот, я бы сделал:

#! /bin/sh -
file="${1?No file specified}"

die() {
  printf >&2 '%s\n' "$@"
  exit 1
}

awk '
  BEGIN {ret = !ok}
  /^#Android-[[:digit:]]{3,4}[^[:digit:]].{19}/ {ret = ok}
  {exit}
  END {exit ret}' < "$file" || die \
    '[Message Format] Your message is not formatted correctly. Correct message format:' \
    '#Ticket Number - Minimum 20 or more Character' \
    'like #Android-123 Bug fixed for login issue'

(удалите ^, если вам не требуется, чтобы номер билета находился в начале строки ).

0
19.03.2021, 02:29

Теги

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