Моя цель - проверить, является ли $ FILE файлом резервной копии (файл резервной копии заканчивается номером xxxx.xx.xx.xx
Пример файлов резервных копий
ls /etc/VRTSvcs/conf/config
main.cf.17Dec2012.09.10.14
main.cf.17Dec2012.09.10.23
main.cf.17Dec2012.09.10.31
Пример файла без резервной копии
main.cf
Я пишу следующую строку сценария ksh, чтобы проверить, закончился ли $ FILE номером xxxx.xx.xx.xx
.
[[ ` echo $FILE | grep -v '[0-9]\{4\}\.[0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{2\}' ` -eq 0 ]] && echo Not Backup file
Я установил
FILE="main.cf.17Dec2012.09.10.31"
и я запускаю эту строку в Solaris / Linux, но получаю «Not Backup file», несмотря на то, что $ FILE закончился на 2012.09.10.31
посоветуйте, пожалуйста, в чем проблема с моей строкой ksh (что нужно исправить), чтобы совпадали числа - xxxx.xx.xx.xx
Просто удалите "-eq 0"
[[ ` echo $FILE | grep -v '[0-9]\{4\}\.[0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{2\}' ` ]] && echo Not Backup file
Подстановка встроенной команды возвращает вывод команды, а не код возврата.
` echo $FILE | grep -v '[0-9]\{4\}\.[0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{2\}' `
вернет пустую строку, а не ноль. Следовательно, эта единственная строка не будет работать должным образом.
Почему мы не можем использовать для этого встроенное Regexp с BASH / KSH? Где FILE1 - ваше имя резервного файла
[[ "$FILE1" =~ [0-9]{4}\.[0-9]{2}\.[0-9]{2}\.1[0-9]{2} ]] || echo "Not a backup file"
Использование времени / ЦП для этого нуля. Без необходимости вы используете три команды, echo
два раза и grep
один раз.