Посібник для початківців для сценаріїв Shell 4 Умови & Якщо-то заяви
Ми охопили достатню кількість основ у нашому посібнику з сценаріїв оболонки, щоб ви відчували себе комфортно, експериментуючи. У частині цього тижня, ми будемо вирішувати деякі з більш цікавих речей, як умови і "якщо-то" заяви.
Які умови?
У повсякденній мові ми говоримо, що умови є вимогами, які необхідно виконати для того, щоб щось відбулося. Для того, щоб мій ноутбук міг підключитися до Інтернету, існує декілька умов, які необхідно виконати, наприклад, наявність провайдера, модему та / або маршрутизатора, включення мого ноутбука тощо. з цих вимог не виконуються, результат - підключення мого ноутбука до Інтернету - не відбувається.
Умови в області обчислювальної роботи аналогічні. Ми можемо перевірити, чи відповідає рядок іншим рядком, чи не відповідає інший рядок, або навіть якщо він взагалі існує. Аналогічно, ми можемо перевірити чисельні аргументи, щоб побачити, чи є він великим, меншим або рівним іншому. Для того, щоб щось відбулося після виконання умов тесту, ми використовуємо твердження "якщо-то". Їх формат досить простий.
якщо умова
потім
command1
command2
…
commandn
fi
Якщо звітів
Давайте зробимо швидкий маленький скрипт тесту?
якщо тест $ 1 -gt $ 2
потім
echo "$ 1 більше $ 2"
fi
Ви помітите, що тільки коли ця умова є істинним, скрипт виконає наступну команду. В іншому випадку викличе оператор "if". Якщо після оператора "if" є якісь команди, вони будуть працювати як звичайно. Я додав наступний рядок до кінця нашого сценарію, щоб проілюструвати це:
echo "Це відбувається після висловлювання if"
Ось деякі інші числові оператори, які можна спробувати:
- -eq: дорівнює
- -ne: не дорівнює
- -lt: менше ніж
- -le: менше або дорівнює
- -gt: більше ніж
- -ge: більше або дорівнює
Тестування рядків
Тепер, якщо ми змінимо перший рядок нашого сценарію, це буде так:
якщо тест $ 1 = $ 2
тоді умова перевірятиметься, якщо два рівні. Там улов тут хоч !! Використання знаку рівності (=) порівнює два рядки, а не числа. Якщо ви хочете порівнювати числа, вам потрібно буде використовувати оператора "-eq", подібно до того, як ми використовували "-gt" вище.
Тепер давайте зробимо ще одну зміну:
if test $ 1! = $ 2
Включення знаку оклику (!) Діє як модифікатор "не". Тобто він виконує лише наступну команду, коли дві рядки не збігаються.
Нижче наведено список деяких тестів на основі рядків, які можна використовувати:
- string: використовує тільки аргумент сам по собі тести, якщо рядок не є порожнім (null) або не визначено певним чином
- -n string: це перевірить, чи не є рядок порожнім і визначено
- -z string: це перевірить, чи є рядок порожнім і визначається таким чином
Що ще про якщо?
Я зізнаюся, що назва розділу, безумовно, була поганим каламбуром. Добре, ми знаємо, як виконати команду, якщо тест є істинним, але що, якщо ми хочемо виконати іншу команду, якщо вона є помилковою? Ми можемо легко покласти їх разом, додавши розділ до наших тверджень “якщо-то” - “ще”!
якщо умова
потім
command1
command2
…
commandn
інше
command1
command2
…
commandn
fi
Давайте скласти простий скрипт.
Там все з належним відступом. Якщо придивитися, ви помітите, що ми використовували квадратні дужки ([і]) замість тестової команди. Вони функціонально еквівалентні для наших цілей, і з більшою ймовірністю ви побачите квадратні дужки з різних причин, тому ми використовуватимемо їх відтепер.
Ось як виглядатиме вивід:
Це так просто!
Що мені робити зараз?
Тепер, коли ви знаєте, як використовувати оператори "if-then-else", ви можете запускати скрипти, які можуть виконувати тести. Наприклад, ви можете запустити скрипт, який буде обчислювати хеш md5 файлу, а потім порівняти його з тим, який ви завантажили у файл, щоб побачити, чи відповідають вони.
Для деяких бонусних пунктів можна створити скрипт, який має цикл "за", але використовує умови тестування замість читання ліній з файлу списку ...
Ми звертаємося до деяких більш цікавих частин в посібнику для початківців для сценаріїв Shell. Якщо ви пропустили попередні уроки, тут можна знайти швидкий перелік:
- Основи сценаріїв оболонки
- Використання циклів
- Більше основних команд
- Які відмінності між оболонками Linux?
- Як використовувати основні регулярні вирази
Якщо ви зробили або використовували сценарії, які використовують умови тестування, якщо ви повинні використовувати оператори if-then-else і "for", поділіться з нами у коментарях!