Параметр управляемое сохранение в virt-manager
приостанавливает гостевую систему и выгружает ее память (и состояние процессора) в файл сохранения. Соответствующий start перезагружает гостя, чтобы он мог продолжить работу с того места, где он остановился.
Это работает с гостевыми системами на базе Linux, но я могу сказать, что опытным путем это не работает с гостевыми системами на базе Windows (они не перезапускаются успешно).
virsh managedsave {guest}
...
virsh start {guest}
Agregar una opción predeterminada a la declaración case
no ayudará porque no se ejecutará si getopts
no tiene opciones para analizar. Puede ver cuántas opciones procesó con la variable de shell OPTIND
. dehelp getopts
:
Each time it is invoked, getopts will place the next option in the
shell variable $name, initializing name if it does not exist, and
the index of the next argument to be processed into the shell
variable OPTIND. OPTIND is initialized to 1 each time the shell or
a shell script is invoked.
Entonces, si OPTIND
es 1, no se procesaron opciones. Agregue esto después de su bucle while
:
if (( $OPTIND == 1 )); then
echo "Default option"
fi
Utilice el bucle getopts
para establecer variables en función de los parámetros que se pasan. Luego actúe sobre estas variables:
#!/bin/sh
# Defaults:
do_help=0
do_r=0
while getopts "hr" opt; do
case $opt in
h) do_help=1 ;;
r) do_r=1 ;;
*) echo 'Error in command line parsing' >&2
exit 1
esac
done
if [ "$do_help" -eq 1 ]; then
show_help
exit
fi
printf 'Default option executed (r=%d)\n' "$do_r"
Opté por dejar que el código saliera correctamente si -h
se usa (a menos que show_help
falle )en lugar de que no -el estado de salida sea cero (pedir ayuda no es un error ).
Ejecutarlo:
$ sh script.sh -r
Default option executed (r=1)
$ sh script.sh
Default option executed (r=0)
$ sh script.sh -h
script.sh[24]: show_help: not found
Esto tiene la ventaja de separar el código de análisis de la línea de comando del resto de la lógica de su secuencia de comandos.
También le permite realizar verificaciones básicas de cordura después del ciclo mientras mantiene el ciclo de análisis breve y simple. Por ejemplo:
# command line parsing loop above here
if [ "$do_help" -eq 1 ] && [ "$do_r" -eq 1 ]; then
echo 'Options -h and -r are mutually exclusive' >&2
exit 1
fi
# code that acts on user-supplied options below
Вы также можете использовать количество аргументов :
if [ "$#" == 0 ]; then
usage
exit 1
fi
Подробнее здесь :http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST
FWIW, я нашел этот ответ StackOverFlow весьма полезным:
for i in "$@"; do
case $i in
-a=*|--a_param=*)
PARAM_A="${i#*=}" ;
-b=*|--b_param=*)
PARAM_B="${i#*=}" ;;
--default)
DEFAULT=YES ;;
*) echo "Unknown parameter passed: $i"; exit 1 ;;
esac
done
echo PARAM_A = ${PARAM_A}
echo PARAM_B = ${PARAM_B}
echo DEFAULT = ${DEFAULT}
Для вызова скрипта без опции по умолчанию:
myscript.sh -a=my_a_param -b=my_b_param
должен напечатать:
PARAM_A = my_a_param
PARAM_B = my_b_param
DEFAULT =
И с установленным параметром по умолчанию:
myscript.sh -a=my_a_param -b=my_b_param --default
PARAM_A = my_a_param
PARAM_B = my_b_param
DEFAULT = YES
Впоследствии вы можете использовать DEFAULT
соответственно
DEF="Default command executed"
while getopts ":hr" opt;
do case $opt in
h) show_help;
exit 1 ;;
r) echo "$DEF" ;;
*) echo "$DEF" ;;
esac
done
Чтобы getopts
обнаружил параметр, вам необходимо добавить :
к каждому параметру, который вы хотите проверить.