Необходимость в $ 1 и $ 2 для сравнения со строкой здесь

Я использую оба CloneZilla и Back In Time для создания резервных копий системы и данных соответственно.

Преимущество CloneZilla перед встроенными инструментами, такими как dd , заключается в том, что он использует свой собственный partclone , который создает очень маленькие изображения (распознает разреженные файлы, может использовать несколько вариантов сжатия). утилиты, ...) и возвращается к ddrescue , который позволяет читать поврежденные жесткие диски! (Приятно иметь эту самую последнюю резервную копию, прежде чем жесткий диск окончательно откажется.)

Однако вы должны иметь (как минимум) отдельные / и / home , если вы хотите легко различать вашу ОС и файлы конфигурации пользователя.

Ничто не является таким гибким, надежным и быстрым, как CloneZilla, чтобы выполнять полное автономное резервное копирование образов / дисков (и я всегда читаю руководства по резервному копированию, если кто-то упоминает его любимый инструмент резервного копирования, чтобы увидеть есть ли у них что-то получше, чем у меня)

Если вы поместите CloneZilla на 512-мегабайтный загрузочный раздел внешнего жесткого диска USB, вы можете просто загрузить его на любой машине и восстановить любую резервную копию, сделанную вами на этом разделе, остальная часть того же жесткого диска.

Предупреждение: если вы восстановите одну и ту же резервную копию системы на нескольких машинах, все эти машины будут клонами друг друга с тем же именем хоста, часовым поясом, IP (если статический), ... так что все эти необходимо настроить после "восстановления" ...

В качестве альтернативы у меня есть загрузочный USB SLC накопитель с полной установкой Linux (в моем случае lubuntu) без каких-либо проприетарных драйверов и ведущий раздел FAT, без раздела подкачки, но файл подкачки внутри раздела / , который я могу загрузить на любой машине (пока) и который я использую для лечения компьютеров с Windows (или просто работаю на чужой машине без касаясь их данных, если они параноики).

-1
03.04.2019, 06:36
2 ответа

read -p "$1:" tmp1 и read -p "$2:" tmp2считывают по строке ввода от пользователя каждый, используя первый($1)и второй($2)аргументы функции в качестве подсказок. Результаты сохраняются в tmp1и tmp2. Затем, если они равны, значение из tmp1считывается в переменную, названную первым аргументом функции сread "$1" <<< "$tmp1"

Итак, то, что вы получите с помощью read_and_verify domain "Please enter the domain of your web application twice", выглядит примерно так, а введенные пользователем данные выделены курсивом:

domain:foo
Please enter the domain of your web application twice:foo

Затем введенное значение сохраняется в переменной domain; работает echo "$domain"после того, как выше показано foo.

I misunderstand why is the $1 and $2 needed and henceforth why is the read "$1" <<< "$tmp1" needed.

$1и $2используются в качестве подсказок пользователю, а $1— это , также используется для передачи имени результирующей переменной в функцию. Это делает первую подсказку немного странной. Возможно, лучше использовать что-то более описательное, например.:

read -p "Please enter value for '$1': " tmp1
read -p "Please repeat the value to verify: " tmp2

Или использовать сообщение, переданное в $2, для обоих подсказок, как это делает ответ на ваш другой вопрос .

read "$1" <<< "$tmp1"также несколько странен, поскольку обычно вы можете просто присвоить значение одной переменной другой. Однако здесь проблема в том, что $1содержит имя переменной, поэтому нам нужно косвенное присвоение. В Bash 4.3 и более поздних версиях мы могли бы использовать для этого ссылку на имя :

.
declare -n ref="$1"
ref=$tmp1

Таким образом, всю функцию лучше написать так:

#!/bin/bash
function read_and_verify  {
    read -p "Please enter value for '$1': " tmp1
    read -p "Please repeat the value to verify: " tmp2
    if [ "$tmp1" != "$tmp2" ]; then
        echo "Values unmatched. Please try again."; return 2
    else
        declare -n ref="$1"
        ref=$tmp1
    fi
}

(обратите внимание, что здесь не используется второй аргумент.)

2
28.01.2020, 05:08

read_and_verify— это функция, в этом контексте $1— первый аргумент (здесь вы вызываете ее с одним из доменов, dbrootp или dbuserp )и $2— второй аргумент (строки, следующие за каждым из этих опций в вызовах ). Если мы расширим его для вызова:

function read_and_verify  {
    read -p "domain:" tmp1
    read -p "Please enter the domain of your web application twice:" tmp2
    if [ "$tmp1" != "$tmp2" ]; then
        echo "Values unmatched. Please try again."; return 2
    else
        read "domain" <<< "$tmp1"
    fi
}

И это то, что $1и $2делают в вашей функции.

0
28.01.2020, 05:08

Теги

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