Два условия в if (только положительные числа без букв)

Предполагая, что имена каталогов отсортированы правильно (т. е. они содержат одинаковое количество цифр и в каталоге нет нечисловых имен):

newest="$(printf '%s\n' /user/mosawi/parentdir/* | tail -n 1)"

Файл будет " $newest/payload.gzip".

Еще один трюк заключается в создании символической ссылки на последний каталог всякий раз, когда создается новый каталог:

mkdir "parentdir/$i" && ln -sf "parentdir/$i" parentdir/latest

Тогда легко получить доступ к parentdir/latest/payload.gzip.

0
22.12.2016, 16:52
2 ответа

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

pattern='[^0-9]'
for arg; do
    if [[ $arg =~ $pattern ]]; then
        printf 'Unacceptable option: %s\n' "$arg"
        exit 3
    fi
done

, если вы хотите, чтобы отдельные тесты имели разные сообщения об ошибках и коды выхода, вы можете сделать эти внутри цикла for и теста arg , который получит каждый параметр командной строки по очереди

2
28.01.2020, 02:19

Вы также можете воспользоваться такими операторами сравнения bash:

if [ $arg -eq $arg -a $arg -ge 0 ] 2>/dev/null ;then  
  echo "accepted"
else 
  echo "not accepted"
fi 

Хитрость в том, что если вы сравните с -eq два нечисловых аргумента, bash вызовет ошибку (которую мы отправили в / dev / null).

2
28.01.2020, 02:19

Теги

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