Это похоже на таблицу разделов на /dev/sda
был уничтожен. Вы не упоминали то, что Вы сделали для уничтожения его, таким образом, трудно сказать точно, как Вы восстановили бы его.
Можно попытаться использовать fdisk
воссоздать sda1
раздел.
При условии, что разделы диска этих трех дисков были идентичны, можно воссоздать sda1
раздел с fdisk /dev/sda1
и те же параметры как на других двух дисках. Если корректный, это должно сделать объем видимым снова. (Вы, возможно, должны перезагрузить позже.)
Если это перестало работать, можно попытаться использовать TestDisk для воссоздания sda1
раздел.
Это просканирует диск и попытается определить местоположение метаданных, которые указывают на то, что было на диске и где, но это может дать ложные положительные стороны. Вы отчасти самостоятельно здесь.
В modern bash (версия 4.2 и выше):
[[ -v name_of_var ]]
From help test
:
-v VAR, True if the shell variable VAR is set
POSIXly:
! (: "${somevar?}") 2>/dev/null && echo somevar unset
или вы можете позволить вашей оболочке показать вам сообщение:
(: "${somevar?}")
zsh: somevar: parameter not set
if set|grep '^somevar=' >/dev/null;then
echo "somevar exists"
else
echo "does not exist"
fi
Вы не можете использовать ] if
команда для проверки существования объявленных переменных в bash, однако параметр -v
существует в более новом bash, но он не переносится, и вы не можете использовать его в более старом bash
версии. Потому что, когда вы используете переменную, если она не существует, она родится одновременно.
Например. Представьте, что я не использовал и не присваивал значение переменной MYTEST
, но когда вы используете команду echo, она ничего вам не показывает! Или, если вы используете if [-z $ MYTEST]
, он вернул нулевое значение!
Он не вернул другой статус выхода, который сообщает вам, что этой переменной не существует!
Теперь у вас есть два решения (Без параметра -v
):
declare
. установить
. Например:
MYTEST=2
set | grep MYTEST
declare | grep MYTEST
Но, к сожалению, эти команды показывают, что вы также загружаете функции в память! Вы можете использовать declare -p | grep -q МОЙТЕСТ; echo $?
для более чистого результата.
printf ${var+'$var exists!\n'}
... не будет печатать вообще ничего, если не будет. Или...
printf $"var does%${var+.}s exist%c\n" \ not !
... скажет в любом случае.
вы можете использовать возвращаемое значение теста для динамического расширения до строки формата, соответствующего вашему условию:
[ "${var+1}" ]
printf $"var does%.$?0s exist%c\n" \ not !
Вы также можете сделать ошибку printf
, основанную на подстановке.....
printf $"var does%${var+.}s exist%c\n%.${var+b}d" \
\ not ! \\c >&"$((2${var+-1}))" 2>/dev/null
... которая печатает $var не существует!
в stderr и возвращает кроме 0, когда $var
не установлен, но отпечатки $var действительно существуют!
на stdout и возвращает 0, когда установлен $var
.
Я думаю, что вы ищете команду udevadm
. Параметры trigger
и test
используются для запуска повторного сканирования событий udev и тестирования конкретного события соответственно.
Я усвоил это трудный способ при использовании нового имени сетевого устройства в EL 7. Удачи!
-121--29338- Установив shell =/usr/bin/zsh\-l
в .vimrc
решил мою проблему
Примечание:
Я использую: linux mint 17,1
-121--37302-Как упоминалось в ответе на SO , вот способ проверки:
if [ -z ${somevar+x} ]; then echo "somevar is unset"; else echo "somevar is set to '$somevar'"; fi
где $ {somevar + x} - расширение параметра, которое вычисляется как null, если var не установлен и заменяет последовательность «x» в противном случае.
При использовании -n
, как предлагается в другом ответе, проверяется только то, содержит ли переменная пустые последовательности. Она не будет проверять свое существование.
Зависит от того, что вы подразумеваете под существует .
Существует ли переменная, которая была объявлена, но не присвоена ?
Существует ли переменная массива (или хэша), которой был назначен пустой список ?
Существует ли переменная nameref, указывающая на переменную, которая в настоящее время не назначена ?
Считаете ли вы переменные $ -
, $ #
, $ 1
? (POSIX этого не делает).
В оболочках типа Борна канонический способ:
if [ -n "${var+set}" ]; then
echo '$var was set'
fi
Он работает для скалярных переменных и других параметров, чтобы определить, было ли переменной присвоено значение (пустое или нет, автоматически из среды, присваивается, читать
, вместо
или другое).
Для оболочек, которые имеют команду typeset
или declare
, это не будет сообщать как set переменные, которые были объявлены , но не назначен , за исключением zsh
.
Для оболочек, поддерживающих массивы, за исключением yash
и zsh
, которые не будут сообщать как набор переменных массива, если не установлен элемент индекса 0.
Для bash
(но не ksh93
и zsh
), для переменных типа ассоциативный массив , это не будет сообщать их как устанавливает , если их элемент ключа «0» не был установлен.
Для ksh93
и bash
, для переменных типа nameref , это возвращает true, только если переменная, на которую ссылается nameref, сама считается установленной. .
Для ksh
, zsh
и bash
потенциально лучшим подходом может быть:
if ((${#var[@]})); then
echo '$var (or the variable it references for namerefs) or any of its elements for array/hashes has been set'
fi
Для ksh93
, zsh
и bash
4.4 или выше, также есть:
if typeset -p var 2> /dev/null | grep -q '^'; then
echo '$var exists'
fi
Который будет сообщать о переменных, которые были установлены или объявлены.
Эта простая строка работает (и работает на большинстве оболочек POSIX):
${var+"false"} && echo "var is unset"
Или, написанная в более длинной форме:
unset var
if ${var+"false"}
then
echo "var is unset"
fi
Расширение:
Расширение $ {var + «false»}
расширяется до значения «null», равного «false».
Затем выполняется «nothing» или «false» и устанавливается код выхода.
Нет необходимости вызывать команду test
( [
или [[
), так как значение выхода устанавливается (выполнением) самого расширения.
$array=()
В дополнение к ответу @Gilles
case " ${!foobar*} "*в *) echo "foobar объявлен";; *) echo "foobar не объявлен";; esac
- для которого я не нашел способа заключить его в функцию - я хотел бы добавить простую версию, которая частично основана на Richard Hansenanswer, но также рассматривает подводный камень, который возникает с пустым array=()
:
# The first parameter needs to be the name of the variable to be checked.
# (See example below)
var_is_declared() {
{ [[ -n ${!1+anything} ]] || declare -p $1 &>/dev/null;}
}
var_is_unset() {
{ [[ -z ${!1+anything} ]] && ! declare -p $1 &>/dev/null;}
}
$1
содержит имя пустого $array=()
, вызов declare гарантирует, что мы получим правильный результат
С помощью следующего кода можно протестировать функции:
( # start a subshell to encapsulate functions/vars for easy copy-paste into the terminal
# do not use this extra parenthesis () in a script!
var_is_declared() {
{ [[ -n ${!1+anything} ]] || declare -p $1 &>/dev/null;}
}
var_is_unset() {
{ [[ -z ${!1+anything} ]] && ! declare -p $1 &>/dev/null;}
}
:; echo -n 'a; '; var_is_declared a && echo "# is declared" || echo "# is not declared"
a=; echo -n 'a=; '; var_is_declared a && echo "# is declared" || echo "# is not declared"
a="sd"; echo -n 'a="sd"; '; var_is_declared a && echo "# is declared" || echo "# is not declared"
a=(); echo -n 'a=(); '; var_is_declared a && echo "# is declared" || echo "# is not declared"
a=(""); echo -n 'a=(""); '; var_is_declared a && echo "# is declared" || echo "# is not declared"
unset a; echo -n 'unset a; '; var_is_declared a && echo "# is declared" || echo "# is not declared"
echo ;
:; echo -n 'a; '; var_is_unset a && echo "# is unset" || echo "# is not unset"
a=; echo -n 'a=; '; var_is_unset a && echo "# is unset" || echo "# is not unset"
a="foo"; echo -n 'a="foo"; '; var_is_unset a && echo "# is unset" || echo "# is not unset"
a=(); echo -n 'a=(); '; var_is_unset a && echo "# is unset" || echo "# is not unset"
a=(""); echo -n 'a=(""); '; var_is_unset a && echo "# is unset" || echo "# is not unset"
unset a; echo -n 'unset a; '; var_is_unset a && echo "# is unset" || echo "# is not unset"
)
Сценарий должен вернуть
a; # is not declared
a=; # is declared
a="foo"; # is declared
a=(); # is declared
a=(""); # is declared
unset a; # is not declared
a; # is unset
a=; # is not unset
a="foo"; # is not unset
a=(); # is not unset
a=(""); # is not unset
unset a; # is unset
Путь чистой оболочки:
[ "${var+1}" ] || echo "The variable has not been set"
Тестовый сценарий:
#!/bin/sh
echo "Test 1, var has not yet been created"
[ "${var+1}" ] || echo "The variable has not been set"
echo "Test 2, var=1"
var=1
[ "${var+1}" ] || echo "The variable has not been set"
echo "Test 3, var="
var=
[ "${var+1}" ] || echo "The variable has not been set"
echo "Test 4, unset var"
unset var
[ "${var+1}" ] || echo "The variable has not been set"
echo "Done"
Результаты:
Test 1, var has not yet been created
The variable has not been set
Test 2, var=1
Test 3, var=
Test 4, unset var
The variable has not been set
Done
С bash 4.4.19 у меня сработало следующее. Вот полный пример
$export MAGENTO_DB_HOST="anyvalue"
#!/bin/bash
if [ -z "$MAGENTO_DB_HOST" ]; then
echo "Magento variable not set"
else
echo $MAGENTO_DB_HOST
fi