Ваш fstab звучит поврежденным, просто измените /etc/fstab
, и измените строку, которая монтирует Ваш корень к новому, вероятно, UUID=XXX,
Для нахождения всего uuids работать blkid
как корень.
Если Ваш grub.cfg устарел, использовать grub-mkconfig -o /boot/grub/grub.cfg
повторно создавать grub.cfg
Править
Обратите внимание, что, когда личинка сканирует для корневого устройства, она берет текущий смонтированный в качестве корня. Необходимо будет изменить grub.cfg вручную и загрузиться от SSD, впоследствии, работать grub-mkconfig
снова
Если вы не возражаете, ограничиваясь однобуквенными именами аргументов, например my_script -p '/ some / path' -a5
, то в bash вы можете использовать встроенные getopts
, например
#!/bin/bash
while getopts ":a:p:" opt; do
case $opt in
a) arg_1="$OPTARG"
;;
p) p_out="$OPTARG"
;;
\?) echo "Invalid option -$OPTARG" >&2
;;
esac
done
printf "Argument p_out is %s\n" "$p_out"
printf "Argument arg_1 is %s\n" "$arg_1"
Затем вы можете выполнить
$ ./my_script -p '/some/path' -a5
Argument p_out is /some/path
Argument arg_1 is 5
Существует полезное Небольшое руководство по getopts , или вы можете ввести help getopts
в командной строке оболочки.
Но вы бы вызвали скрипт с помощью [1168683]myscript --p_out foo[1168684].
Обратите внимание, что [1168685]zparseopts[1168686] не поддерживает опции сокращения long или синтаксис [1168687]--p_out=foo[1168688] вроде GNU [1168689]getopt(3)[1168690] поддерживает.[1168371].Вероятно, наиболее близкий к этому синтаксис:
p_out='/some/path' arg_1='5' my_script
mitsos@redhat24$ my_script "a=1;b=mitsos;c=karamitsos"
#!/bin/sh
eval "$1"
Вы только что вводили параметры командной строки внутри сценария !!
/etc/rc.d/rc.local
Посмотрите на файл rc.local в вашей системе, независимо от того, что там установлено, будет выполняться при каждой загрузке системы. Можно также установить cron-задание, основываясь на предварительной информации о том, когда система перезагрузится, что может привести к удалению команды из rc.local после завершения загрузки компьютера.
Вы также можете поместить все, что хотите, в скрипт init в каталоге/etc/init.d или соответствующем каталоге/etc/rc.d.
-121--150480-Для моделирования входа в систему (без прохождения «sudo -i») необходимо использовать команду «su».
Проверка справочной страницы для параметра «» - «»:
-, -l, --login
Starts the shell as login shell with an environment similar to a real login:
o clears all environment variables except for TERM
o initializes the environment variables HOME, SHELL, USER, LOGNAME, PATH
o changes to the target user's home directory
o sets argv[0] of the shell to '-' in order to make the shell a login shell
Кроме того, здесь необходимо использовать doc .
Например, можно проверить этот идентификатор пользователя в журнале печати с помощью команды 'id':
#\bin\bash
id
su - user <<EOF
userPassword
id
#here you can execute your script
EOF
id
Кроме того, если программа выполняет ошибку сегментации. пытается получить доступ к другому сегменту памяти, который не принадлежит программе.
-121--150767-Я украл это у drupal.org , но вы можете сделать что-то подобное:
while [ $# -gt 0 ]; do
case "$1" in
--p_out=*)
p_out="${1#*=}"
;;
--arg_1=*)
arg_1="${1#*=}"
;;
*)
printf "***************************\n"
printf "* Error: Invalid argument.*\n"
printf "***************************\n"
exit 1
esac
shift
done
Единственное замечание - вы должны использовать синтаксис мой _ скрипт --p_out=/some/path --arg_1=5
.
Если функция или приложение имеет более нуля аргументов, у них всегда есть последний аргумент.
Если вы хотите прочитать пары флагов и значений, например:
$ ./t.sh -o output -i input -l last
И вы хотите принять переменную количество пар параметр / значение,
И не нужно огромное дерево «если .. то .. еще .. фи»,
Затем, после проверки количества аргументов, отличного от нуля и даже,
Напишите цикл while с этими четырьмя операторами eval в качестве тела, за которым следует оператор case, используя два значения, определенные при каждом проходе цикла.
Здесь показана сложная часть сценария:
#!/bin/sh
# For each pair - this chunk is hard coded for the last pair.
eval TMP="'$'$#"
eval "PICK=$TMP"
eval TMP="'$'$(($#-1))"
eval "OPT=$TMP"
# process as required - usually a case statement on $OPT
echo "$OPT \n $PICK"
# Then decrement the indices (as in third eval statement)
:<< EoF_test
$ ./t.sh -o output -i input -l last
-l
last
$ ./t.sh -o output -l last
-l
last
$ ./t.sh -l last
-l
last
EoF_test
Я использую этот скрипт и он работает как шарм:
for ARGUMENT in "$@"
do
KEY=$(echo $ARGUMENT | cut -f1 -d=)
VALUE=$(echo $ARGUMENT | cut -f2 -d=)
case "$KEY" in
STEPS) STEPS=${VALUE} ;;
REPOSITORY_NAME) REPOSITORY_NAME=${VALUE} ;;
*)
esac
done
echo "STEPS = $STEPS"
echo "REPOSITORY_NAME = $REPOSITORY_NAME"
Использование
bash my_scripts.sh STEPS="ABC" REPOSITORY_NAME="stackexchange"
Результат консоли:
STEPS = ABC
REPOSITORY_NAME = stackexchange
STEPS и REPOSITORY_NAME готовы к использованию в скрипте.
Не имеет значения, в каком порядке расположены аргументы.
Я только что придумал этот скрипт
while [ $# -gt 0 ]; do
if [[ $1 == *"--"* ]]; then
v="${1/--/}"
declare $v="$2"
fi
shift
done
передайте его как my_script --p_out /some/path --arg_1 5
, а затем в скрипте вы можете использовать $arg_1
и $p_out
.
Я только что сделал это. Он не требует "=" и поддерживает параметры, не имеющие значения -. Помните о необходимости дополнительных команд shift
для значений параметров.
#!/bin/bash
if [ $# -eq 0 ]; then
printf "Utilizacao:\n"
printf "$0 [[--imagem_inicial|-i] <tag_inicial>] [[--imagem_final|-f] <tag_final>] [--verbose|-v]\n"
exit 1
fi
while [ $# -gt 0 ]; do
case "$1" in
--imagem_inicial|-i)
export tag_imagem_inicial="${2}"
shift
;;
--imagem_final|-f)
export tag_imagem_final="${2}"
shift
;;
--verbose|-v)
export verbose_option=1
;;
*)
printf "ERRO: Parametros invalidos\n"
printf "Execute sem parametros para a sintaxe.\n"
exit 1
esac
shift
done
echo tag_imagem_inicial=${tag_imagem_inicial}
echo tag_imagem_final=${tag_imagem_final}