Различие - точно 4 096 байтов, мог быть дополнительный MBR? (используйте fdisk на устройстве и посмотрите то, что Вы получаете),
Это могло также произойти из-за конкретного формата, отличающегося от оригинала, используемого в .iso.
Проверьте горящие опции.
В некоторых дистрибутиве 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
Примечания:
BC BC
BC
Процесс для каждого параметра , если
Условное выражение. Если
работает путем проверки кодов выхода процесса. Обычно используются [
[ или [[[ [[[
[[[
исполняемых файлов, но нет причин, по которой другие программы могут быть использованы, если они выходят с полезными кодами выхода CAL
вывод для правильных дат или нет. Если вы сделаете, просто растресментируйте строку
. [[
на самом деле является командой, и, как и другие команды, которые вам нужен пробел, чтобы отделить его аргументы:
if [[ $? -eq 0 ]]; then
# ...^
Между Вашим долларом $
и Вашей переменной месяц
должно быть:
cal $day $ month $year 2> /dev/null
Должно быть:
cal $day $month $year 2> /dev/null
Если вы введете дату в формате «%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
...
Надеюсь, я правильно понял вопрос, и это кому-нибудь поможет. Конечно, у меня сработало:)