сценарий удара, который читает ввод данных пользователем и использует команду “cal” для проверки дат

Различие - точно 4 096 байтов, мог быть дополнительный MBR? (используйте fdisk на устройстве и посмотрите то, что Вы получаете),

Это могло также произойти из-за конкретного формата, отличающегося от оригинала, используемого в .iso.

Проверьте горящие опции.

3
13.01.2019, 23:51
4 ответа

В некоторых дистрибутиве I Linux, которые я проверил (E, G, Ubuntu 14.04), упакованный Cal исходит от BSD, а не GNU Cereutils. Версия BSD, похоже, не принимает дни в качестве параметра; только месяцы и годы. Версия Ubuntu имеет a -h-yyyy-mm-dd, но это, кажется, не помогает.

Вместо этого я бы использовал дату утилиту. Предполагая, что GNU CORETILS под Linux я думаю, что я бы переписал свой скрипт что-то вроде:

#!/bin/bash

day=$((10#$1))
month=$((10#$2))
year=$((10#$3))

if date -d $year-$month-$day > /dev/null 2>&1; then
    # cal $month $year
    echo "This is a valid date"
else
    echo "This is an invalid date"
fi

Примечания:

  • Я использую собственную арифметическое расширение для проверки ввода / удаления ведущих нулей вместо того, чтобы высказать New BC BC BC Процесс для каждого параметра
  • Я использую Дата GNU Дата Для анализа даты ввода
  • Команда даты может использоваться непосредственно как , если Условное выражение. Если работает путем проверки кодов выхода процесса. Обычно используются [ [ или [[[ [[[ [[[ исполняемых файлов, но нет причин, по которой другие программы могут быть использованы, если они выходят с полезными кодами выхода
  • , я не уверен, если вы На самом деле хотела CAL вывод для правильных дат или нет. Если вы сделаете, просто растресментируйте строку .
3
27.01.2020, 21:16

[[ на самом деле является командой, и, как и другие команды, которые вам нужен пробел, чтобы отделить его аргументы:

if [[ $? -eq 0 ]]; then
# ...^
1
27.01.2020, 21:16

Между Вашим долларом $ и Вашей переменной месяц должно быть:

cal $day $ month $year 2> /dev/null

Должно быть:

cal $day $month $year 2> /dev/null
1
27.01.2020, 21:16

Если вы введете дату в формате «%Y -%m -%d» или «%m/%d/&Y» (, например. 2020 -11 -29 или 29.11.2020 ), вы можете проверить действительность даты, используя gnu date (gdate )вот так:

gdate -d "$1" +'%Y-%m-%d' > /dev/null 2>&1  # don't display any output
status=$(echo $?)                           # get error code
if [[ $status = 1 ]]                        # if date is invalid
then
  { echo "This date doesn't exist. Enter valid date!"; exit 1; }
else
 ...

Надеюсь, я правильно понял вопрос, и это кому-нибудь поможет. Конечно, у меня сработало:)

0
29.11.2020, 18:15

Теги

Похожие вопросы