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
Поскольку вы устанавливаете GRUB на другой диск, вам нужно сообщить grub-install
, где находится раздел /boot
на вашем новом диске. Вот пример (запуска от имени пользователя root):
mount /dev/sdb2 /mnt
grub-install --boot-directory=/mnt /dev/sdb
umount /mnt