Більш просунутий при використанні

Це конструкція, яка використовується для виконання одного курсу дій, якщо команди if перевіряють істину, а інше - якщо перевіряє хибність. Приклад:

їсти трохи

freddy scripts> gender = "male" freddy scripts> if [["$ gender" == "f *"]] Більше вводу> тоді лунає "Рада познайомитися з вами, мадам". Більше вступних даних> else echo "Як це дама ще не випила?" Більше вхідних даних> fi Як, леді ще не випила? freddy сценарії>

На відміну від [, [[запобігає розбиттю слів змінних значень. Отже, якщо VAR = "var з пробілами", вам не потрібно двічі вводити $ VAR у тесті - навіть незважаючи на те, що використання лапок залишається хорошою звичкою. Крім того, [[запобігає розширенню імені шляху, тому буквальні рядки з узагальнюючими знаками не намагаються розширити до імен файлів. Використовуючи [[, == та! = Інтерпретуйте рядки праворуч як шаблони глобусів оболонки, які слід зіставити зі значенням зліва, наприклад: [["value" == val *]] .

Як і список CONSEQUENT-COMMANDS, що слідує за оператором then, список ALTERNATE-CONSEQUENT-COMMANDS після оператора else може містити будь-яку команду стилю UNIX, яка повертає статус виходу.

Інший приклад, що розширює приклад із розділу 7.1.2.1:

> su - Пароль: [root @ elegance root] # if! grep ^ $ USER/etc/passwd 1>/dev/null> тоді echo "вашим обліковим записом користувача не управляється локально"> else echo "вашим обліковим записом керується з локального файлу/etc/passwd"> fi вашим обліковим записом керується з локальний файл/etc/passwd [root @ elegance root] #

Ми переходимо до кореневого облікового запису, щоб продемонструвати ефект оператора else - ваш корінь зазвичай є локальним обліковим записом, тоді як вашим власним обліковим записом може керувати центральна система, наприклад, сервер LDAP.

Замість того, щоб встановлювати змінну, а потім виконувати скрипт, часто буває вишуканіше розміщувати значення змінних у командному рядку.

Ми використовуємо позиційні параметри $ 1, $ 2,. $ N для цієї мети. $ # відноситься до кількості аргументів командного рядка. $ 0 відноситься до назви сценарію.

Далі наведено простий приклад:

Малюнок 7-1. Тестування аргументу командного рядка за допомогою if

Ось ще один приклад, використовуючи два аргументи:

> cat weight.sh #!/bin/bash # Цей сценарій друкує повідомлення про вашу вагу, якщо ви надаєте йому свою # вагу у кілограмах та зріст у сантиметрах. вага = "$ 1" висота = "$ 2" ідеальна вага = $ [$ висота - 110], якщо [$ вага -le $ ідеальна вага]; потім луна "Ви повинні їсти трохи більше жиру". else echo "Вам слід з'їсти трохи більше фруктів". fi anny

> bash -x weight.sh 55 169 + вага = 55 + зріст = 169 + ідеальна вага = 59 + '[' 55 -le 59 ']' + echo 'Ви повинні їсти трохи більше жиру'. Ви повинні їсти трохи більше жиру.

У наступному прикладі показано, як змінити попередній сценарій так, щоб він друкував повідомлення, якщо задано більше або менше 2 аргументів:

> cat weight.sh #!/bin/bash # Цей сценарій друкує повідомлення про вашу вагу, якщо ви надаєте йому свою # вагу у кілограмах та зріст у сантиметрах. якщо [! $ # == 2]; потім луна "Використання: $ 0 weight_in_kilos length_in_centimeters" вихід fi вага = "$ 1" висота = "$ 2" ідеальна вага = $ [$ висота - 110], якщо [$ вага -le $ ідеальна вага]; потім луна "Ви повинні їсти трохи більше жиру". else echo "Вам слід з'їсти трохи більше фруктів". fi anny

> вага.ш 70 150 Ви повинні їсти трохи більше фруктів. анні

> weight.sh 70 150 33 Використання: ./weight.sh weight_in_kilos length_in_centimeters

Перший аргумент називається $ 1, другий - $ 2 і так далі. Загальна кількість аргументів зберігається в $ # .

Цей тест проводиться у багатьох сценаріях, тому що немає сенсу запускати багато програм, якщо ви знаєте, що вони не працюватимуть:

#!/bin/bash # Цей скрипт надає інформацію про файл. FILENAME = "$ 1" echo "Властивості для $ FILENAME:" if [-f $ FILENAME]; тоді echo "Розмір $ (ls -lh $ FILENAME | awk '< print $5 >') "echo" Тип $ (файл $ FILENAME | cut -d ":" -f2 -) "echo" Номер індексу $ (ls -i $ FILENAME | cut -d " -f1 -) "echo" $ (df ​​-h $ FILENAME | grep -v Встановлено | awk '< print "On",$1", \ which is mounted as the",$6,"partition.">') "else echo" Файл не існує. "fi