<Попередній | зміст | Наступна>
Більш сучасна версія тесту
Останні версії бити включити складену команду, яка діє як розширена заміна для тест. Він використовує наступний синтаксис:
[[ вираз ]]
де, як тест, вираз є виразом, який оцінює як істинний, так і хибний результат. The [[]] команда дуже схожа на тест (він підтримує всі його вирази), але
додає новий важливий рядковий вираз:
string1 =~ regex
який повертає true if string1 відповідає розширеному регулярному виразу regex. Це відкриває багато можливостей для виконання таких завдань, як перевірка даних. У нашому попередньому прикладі цілочисельних виразів сценарій зазнає невдачі, якщо константа INT містить будь-що, крім цілого числа. Скрипту потрібен спосіб перевірити, що константа містить ціле число. Використання [[]] з =~ оператор рядкового виразу, ми могли б покращити сценарій таким чином:
#! / бін / баш
# test-integer2: оцінити значення цілого числа.
INT=-5
якщо [[ "$INT" =~ ^-?[0-9]+$ ]]; тоді
якщо [ $INT -eq 0 ]; потім луна "INT дорівнює нулю".
ще
якщо [ $INT -lt 0 ]; потім луна "INT негативний".
ще
echo "INT позитивний."
fi
якщо [ $((INT % 2)) -екв 0 ]; потім луна "INT парне".
ще
echo "INT непарний."
fi
fi
ще
echo "INT не є цілим числом." >&2 вихід 1
fi
#! / бін / баш
# test-integer2: оцінити значення цілого числа.
INT=-5
якщо [[ "$INT" =~ ^-?[0-9]+$ ]]; тоді
якщо [ $INT -eq 0 ]; потім луна "INT дорівнює нулю".
ще
якщо [ $INT -lt 0 ]; потім луна "INT негативний".
ще
echo "INT позитивний."
fi
якщо [ $((INT % 2)) -екв 0 ]; потім луна "INT парне".
ще
echo "INT непарний."
fi
fi
ще
echo "INT не є цілим числом." >&2 вихід 1
fi
Застосовуючи регулярний вираз, ми можемо обмежити значення INT лише для рядків, які починаються з необов’язкового знака мінус, за яким слідують одне чи декілька цифр. Цей вираз також усуває можливість порожніх значень.
Ще одна додаткова функція [[]] Ест дие ле == Оператор підтримує відповідність шаблону так само, як і розширення шляху. Наприклад:
[me@linuxbox ~]$ FILE=foo.bar
[me@linuxbox ~]$ FILE=foo.bar
Більш сучасна версія тесту
[me@linuxbox ~]$ якщо [[ $FILE == foo.* ]]; тоді
> echo "$FILE відповідає шаблону 'foo.*'"
> fi
foo.bar відповідає шаблону 'foo.*'
[me@linuxbox ~]$ якщо [[ $FILE == foo.* ]]; тоді
> echo "$FILE відповідає шаблону 'foo.*'"
> fi
foo.bar відповідає шаблону 'foo.*'
Це робить [[]] корисно для оцінки файлів і шляхів.