Сравните числовой вывод команды bash - PullRequest
0 голосов
/ 20 ноября 2018

Я запускаю скрипт, который изменяет значение параметра в файле:

Перед выполнением скрипта:

$ cat file

revision 1.2 date:2018/11/15 09:28:12;автор: root;состояние: Exp;строк: +1 -1

После запуска сценария:

файл $ cat

редакция 1.3 дата: 2018/11/15 09:28: 12;автор: root;состояние: Exp;строки: +1 -1 редакция 1.2 дата: 2018/11/15 09:28:12;автор: root;состояние: Exp;Строки: +1 -1

Мне нужен скрипт, который мог бы проверить, обновлена ​​ли версия / увеличена на одну версию больше, чем предыдущая версия, если да, то должно появиться сообщение «Сценарий успешно запущен»'.

$grep -iw 'revision' file  | head -1 | cut -d' ' -f2

1.2

$sh <script>

$grep -iw 'revision' file  | head -1 | cut -d' ' -f2

1.3

$echo -e "Script ran successfully!!! \n"

1 Ответ

0 голосов
/ 20 ноября 2018

Вот функция, которая будет сравниваться со строками версий и определять, будут ли они в последовательности.Я сделал пару предположений в сравнении.Количество «десятичных знаков» должно быть одинаковым.Я также оставил дверь широко открытой для больших ошибок, см. Мой последний контрольный пример.Считай это быстрым и грязным.Вероятно, было бы лучше написать логику для сравнения каждого десятичного значения и убедиться, что последнее десятичное число на единицу больше, чем предыдущее.Более правильная версия могла бы сравнить abc с def, сначала сравнив a == d, затем b == c, а затем f == c + 1. Однако, в зависимости от того, что вы пытаетесь сделать, быстрый и грязный можетбыть самым простым в обслуживании.

Без дополнительного обсуждения, вот быстрая и грязная версия:

function bumped() {
  prev=$1
  next=$2

  PREV=$( sed 's/[^0-9]//g' <<<"$prev" ) 
  NEXT=$( sed 's/[^0-9]//g' <<<"$next" ) 

  [ $(( NEXT - PREV )) -eq 1 ]

}

function testcases() { 
cat <<EOF
1.2 1.3 0
1.3 1.2 1
1.2.1 1.2.2 0
1.3   1.3.1 1
EOF
}

testcases | while
  read prev next expected extra
do
  bumped $prev $next
  observed=$?
  result="Success"
  [ $observed -ne $expected ] && result="Failed"
  echo "$result: bumped( $prev , $next ) = $observed ( expected: $expected )"
done

Приведенная выше программа дает следующие результаты:

Success: bumped( 1.2 , 1.3 ) = 0 ( expected: 0 )
Success: bumped( 1.3 , 1.2 ) = 1 ( expected: 1 )
Success: bumped( 1.2.1 , 1.2.2 ) = 0 ( expected: 0 )
Success: bumped( 1.3 , 1.3.1 ) = 1 ( expected: 1 )
Failed: bumped( 1.3.1.1 , 13.1.2 ) = 0 ( expected: 1 )

Очевидно, что это не оптимальное решение, но оно может привести вас туда, куда вам нужно.Если вы все время ищете что-то правильное, рассмотрите логику, рассмотренную выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...