Онлайн робочі станції OnWorks Linux та Windows

логотип

Безкоштовний онлайн-хостинг для робочих станцій

<Попередній | зміст | Наступна>

Більш повна програма

Після тривалої перерви ми збираємося відновити роботу над нашим сторінка sys_info програма. Наше наступне доповнення додасть до програми кілька параметрів командного рядка, а саме:

Вихідний файл. Ми додамо опцію, щоб вказати ім'я для файлу, який міститиме вихідні дані програми. Це буде зазначено як або -f файл or --файл файл.

Інтерактивний режим. Цей параметр запропонує користувачеві ввести ім’я вихідного файлу та визначить, чи вже існує вказаний файл. Якщо це так, користувачу буде запропоновано перед перезаписом існуючого файлу. Цей параметр буде вказано будь-яким -i or --інтерактивні.

Довідка. Або -h or --допомога може бути вказано, щоб програма вивела інформативне повідомлення про використання.

Ось код, необхідний для реалізації обробки командного рядка:



використання () {

echo "$PROGNAME: використання: $PROGNAME [-f файл | -i]" повернення

}

# інтерактивні параметри командного рядка процесу=

використання () {

echo "$PROGNAME: використання: $PROGNAME [-f файл | -i]" повернення

}

# інтерактивні параметри командного рядка процесу=


ім'я файлу=


в той час як [[ -n $1 ]]; зробити кейс 1 дюйм

-f | --файл)

зсув

ім'я файлу=$1

;;

ім'я файлу=


в той час як [[ -n $1 ]]; зробити кейс 1 дюйм

-f | --файл)


-я | --interactive) interactive=1

;;

-h | --help) вихід із використання

;;

*) використання >&2

вихід 1

;;

-я | --interactive) interactive=1

;;

-h | --help) вихід із використання

;;

*) використання >&2

вихід 1

;;


що С

зміна виконана

що С

зміна виконана


зображення

Спочатку ми додаємо функцію оболонки під назвою використання щоб відобразити повідомлення під час виклику параметра довідки або спроби невідомого параметра.

Далі починаємо цикл обробки. Цей цикл продовжується, поки параметр позиціонування

$1 не порожній. Наприкінці циклу ми маємо команду shift для переміщення параметрів позиції, щоб гарантувати, що цикл врешті-решт завершиться.

У межах циклу ми маємо a випадок оператор, який перевіряє поточний параметр позиції, щоб перевірити, чи відповідає він будь-якому з підтримуваних варіантів. Якщо підтримуваний параметр знайдено, на нього вживаються дії. Якщо знайдено невідомий вибір, відображається повідомлення про використання, і сценарій завершується помилкою.

Команда -f параметр обробляється цікавим способом. При виявленні викликає додаткову зсув відбутися, що збільшує позиційний параметр $1 до аргументу імені файлу, наданого до -f варіант.

Далі ми додаємо код для реалізації інтерактивного режиму:



# інтерактивний режим


якщо [[ -n $interactive ]]; тоді поки правда; робити

read -p "Введіть ім'я вихідного файлу: " ім'я файлу, якщо [[ -e $filename ]]; тоді

read -p "'$filename' існує. Перезаписати? [y/n/q] > " case $REPLY в

Y|y) розрив

# інтерактивний режим


якщо [[ -n $interactive ]]; тоді поки правда; робити

read -p "Введіть ім'я вихідного файлу: " ім'я файлу, якщо [[ -e $filename ]]; тоді

read -p "'$filename' існує. Перезаписати? [y/n/q] > " case $REPLY в

Y|y) розрив


;;

Q|q) echo "Програма завершена." вихід

;;

*) продовжити

;;

що С

elif [[ -z $filename ]]; потім продовжуйте

ще

перерву

fi

зроблений

fi

;;

Q|q) echo "Програма завершена." вихід

;;

*) продовжити

;;

що С

elif [[ -z $filename ]]; потім продовжуйте

ще

перерву

fi

зроблений

fi


Якщо інтерактивний змінна не порожня, запускається нескінченний цикл, який містить підказку імені файлу та наступний існуючий код обробки файлів. Якщо потрібний вихідний файл уже існує, користувачеві буде запропоновано перезаписати, вибрати інше ім’я файлу або вийти з програми. Якщо користувач вирішує перезаписати існуючий файл, a перерву виконується для завершення циклу. Зверніть увагу, як випадок оператор визначає лише те, чи вирішує користувач перезаписати або вийти. Будь-який інший вибір призводить до продовження циклу та запиту користувача знову.

Щоб реалізувати функцію назви вихідного файлу, ми повинні спочатку перетворити існуючий код для запису сторінки у функцію оболонки з причин, які стануть зрозумілими згодом:



write_html_page () { cat <<- _EOF_

$TITLE

$TITLE

$TIMESTAMP

$(час роботи звіту)

$(report_disk_space)

$(report_home_space)

_EOF_ повернення

}


# вихідна html-сторінка


якщо [[ -n $filename ]]; тоді

write_html_page () { cat <<- _EOF_

$TITLE

$TITLE

$TIMESTAMP

$(час роботи звіту)

$(report_disk_space)

$(report_home_space)

_EOF_ повернення

}


# вихідна html-сторінка


якщо [[ -n $filename ]]; тоді


якщо торкніться $filename && [[ -f $filename ]]; потім write_html_page > $filename

ще

echo "$PROGNAME: Неможливо записати файл '$filename'" >&2 вихід 1

fi ще

write_html_сторінка

fi

якщо торкніться $filename && [[ -f $filename ]]; потім write_html_page > $filename

ще

echo "$PROGNAME: Неможливо записати файл '$filename'" >&2 вихід 1

fi ще

write_html_сторінка

fi


Код, який обробляє логіку -f опція з’являється в кінці списку, показаного вище. У ньому ми перевіряємо наявність імені файлу і, якщо воно знайдено, виконується перевірка, щоб перевірити, чи дійсно файл придатний для запису. Для цього а торкатися виконується, після чого проводиться перевірка, щоб визначити, чи є отриманий файл звичайним файлом. Ці два тести вирішують ситуації, коли введено недійсний шлях (торкатися не вдасться), і, якщо файл уже існує, це звичайний файл.

Як бачимо, в write_html_сторінка функція викликається для здійснення фактичного генерування сторінки. Його вихід або спрямовується на стандартний вихід (якщо змінна ім'я файлу порожній) або переспрямовано до вказаного файлу.


Найпопулярніші хмарні обчислення ОС на OnWorks: