Онлайн-рабочие станции OnWorks Linux и Windows

Логотип

Бесплатный хостинг в Интернете для рабочих станций

<Предыдущая | Содержание: | Следующая>

Более полное приложение

После долгого перерыва мы возобновим работу над нашим проектом. sys_info_page программа. Наше следующее дополнение добавит в программу несколько параметров командной строки:

Выходной файл. Мы добавим возможность указать имя файла, содержащего выходные данные программы. Он будет указан как -f файл or --файл файл.

Интерактивный режим. Эта опция предложит пользователю ввести имя выходного файла и определит, существует ли указанный файл. Если это так, пользователю будет предложено это сделать, прежде чем существующий файл будет перезаписан. Эта опция будет указана либо -i or - интерактивный.

Справка. Или -h or --Помогите может быть указано, чтобы программа выводила информативное сообщение об использовании.

Вот код, необходимый для реализации обработки командной строки:



Применение () {

echo "$PROGNAME: использование: $PROGNAME [-f файл | -i]" return

}

# параметры командной строки процесса интерактивный=

Применение () {

echo "$PROGNAME: использование: $PROGNAME [-f файл | -i]" return

}

# параметры командной строки процесса интерактивный=


имя файла=


в то время как [[ -n $1 ]]; сделать дело на 1 доллар

-ф | --файл)

сдвиг

имя файла = $ 1

;;

имя файла=


в то время как [[ -n $1 ]]; сделать дело на 1 доллар

-ф | --файл)


-я | --интерактивный) интерактивный=1

;;

-ч | --help) выход из использования

;;

*) использование >&2

выйти из 1

;;

-я | --интерактивный) интерактивный=1

;;

-ч | --help) выход из использования

;;

*) использование >&2

выйти из 1

;;


ESAC

смена сделана

ESAC

смена сделана


изображение

Сначала мы добавляем функцию оболочки под названием пользования для отображения сообщения при вызове опции справки или попытке неизвестной опции.

Далее мы начинаем цикл обработки. Этот цикл продолжается, пока позиционный параметр

$1 не пуст. В конце цикла у нас есть команда сдвига для продвижения позиционных параметров, чтобы гарантировать, что цикл в конечном итоге завершится.

Внутри цикла у нас есть случаев оператор, который проверяет текущий позиционный параметр, чтобы увидеть, соответствует ли он какому-либо из поддерживаемых вариантов. Если поддерживаемый параметр найден, на него воздействуют. Если обнаружен неизвестный выбор, отображается сообщение об использовании, и сценарий завершается с ошибкой.

Ассоциация -f параметр обрабатывается интересным образом. При обнаружении это вызывает дополнительную сдвиг произойти, что приводит к увеличению позиционного параметра $1 к аргументу имени файла, переданному в -f опцию.

Затем мы добавляем код для реализации интерактивного режима:



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


если [[ -n $interactive ]]; тогда пока правда; делать

read -p "Введите имя выходного файла: " имя файла if [[ -e $filename ]]; затем

read -p "$filename' существует. Перезаписать? [y/n/q] > " случай $REPLY в

Д|у) перерыв

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


если [[ -n $interactive ]]; тогда пока правда; делать

read -p "Введите имя выходного файла: " имя файла if [[ -e $filename ]]; затем

read -p "$filename' существует. Перезаписать? [y/n/q] > " случай $REPLY в

Д|у) перерыв


;;

Q|q) echo «Программа завершена». Выход

;;

*) продолжать

;;

ESAC

элиф [[ -z $имя_файла ]]; затем продолжай

еще

перерыв

fi

сделанный

fi

;;

Q|q) echo «Программа завершена». Выход

;;

*) продолжать

;;

ESAC

элиф [[ -z $имя_файла ]]; затем продолжай

еще

перерыв

fi

сделанный

fi


Если же линия индикатора интерактивный переменная не пуста, запускается бесконечный цикл, который содержит приглашение имени файла и последующий существующий код обработки файла. Если желаемый выходной файл уже существует, пользователю будет предложено перезаписать его, выбрать другое имя файла или выйти из программы. Если пользователь решит перезаписать существующий файл, перерыв выполняется для завершения цикла. Обратите внимание, как случаев Оператор только определяет, решает ли пользователь перезаписать или выйти. Любой другой выбор приводит к продолжению цикла и повторному запросу пользователя.

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



write_html_page () { cat <<- _EOF_

$ TITLE

$ TITLE

$ TIMESTAMP

$ (report_uptime)

$ (report_disk_space)

$ (report_home_space)

_EOF_ возврат

}


# вывод html-страницы


если [[ -n $имя_файла]]; затем

write_html_page () { cat <<- _EOF_

$ TITLE

$ TITLE

$ TIMESTAMP

$ (report_uptime)

$ (report_disk_space)

$ (report_home_space)

_EOF_ возврат

}


# вывод html-страницы


если [[ -n $имя_файла]]; затем


если коснуться $filename && [[ -f $filename ]]; затем write_html_page > $filename

еще

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

фи еще

write_html_page

fi

если коснуться $filename && [[ -f $filename ]]; затем write_html_page > $filename

еще

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

фи еще

write_html_page

fi


Код, который обрабатывает логику -f Опция появится в конце списка, показанного выше. В нем мы проверяем существование имени файла и, если оно найдено, выполняется проверка, чтобы убедиться, что файл действительно доступен для записи. Для этого трогать выполняется, после чего следует проверка, чтобы определить, является ли полученный файл обычным файлом. Эти два теста заботятся о ситуациях, когда вводится недопустимый путь (трогать потерпит неудачу), и, если файл уже существует, то это обычный файл.

Как видим, write_html_page Функция вызывается для фактического создания страницы. Его вывод либо направляется на стандартный вывод (если переменная имя файла пуст) или перенаправляется в указанный файл.


Лучшие облачные вычисления для ОС в OnWorks: