Проверять, не было ли никаких аргументов, предоставленных команде, контрольному числу $#
переменная затем,
if [ $# -eq 0 ]; then
echo "No arguments provided"
exit 1
fi
Если Вы хотите использовать $*
(не предпочтительный) затем,
if [ "$*" == "" ]; then
echo "No arguments provided"
exit 1
fi
Некоторое объяснение:
Второй подход не предпочтителен потому что в позиционном расширении параметра *
расширяется до позиционных параметров, запускающихся от одного. Когда расширение происходит в двойных кавычках, оно расширяется до отдельного слова со значением каждого параметра, разделенного первым символом специальной переменной IFS. Это означает, что строка создается. Таким образом, существует дополнительно служебный.
С другой стороны, #
расширяется до количества позиционных параметров.
Пример:
$ command param1 param2
Здесь,
Значение $#
2 и значение $*
строка "param1 param2" (без кавычек), если IFS сброшена. Поскольку, если IFS сброшена, параметры разделяются пробелами
Для получения дополнительной информации man bash
и считайте тему под названием Специальные Параметры
/etc/init.d
сохраняется на человечности для обратной совместимости с материалом sysvinit. Если Вы на самом деле смотрите на /etc/init.d/rc.local
Вы будете видеть (также с 12.04 Серверов LTS):
#! /bin/sh
### BEGIN INIT INFORMATION
# Provides: rc.local
# Required-Start: $remote_fs $syslog $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Run /etc/rc.local if it exist
### END INIT INFO
И "Выполненный/etc/rc.local" точно, что он делает. Полнота /etc/rc.local
:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0
Я предположил бы цель в выполнении, это должно обеспечить, очень простое место для помещения оболочки управляет, чтобы Вы хотели выполненный при начальной загрузке, не имея необходимость иметь дело с stop|start сервисным материалом, который находится в /etc/init.d/rc.local
.
Таким образом, это - на самом деле сервис и может быть выполнено как таковое. Я добавил a echo
строка к /etc/rc.local
и:
»service rc.local start
hello world
Однако я не полагаю, что на это ссылается что-либо в выскочке /etc/init
(не init.d!) каталог:
»initctl start rc.local
initctl: Unknown job: rc.local
В выскочке существует несколько "емкостно-резистивных" сервисов:
»initctl list | grep rc
rc stop/waiting
rcS stop/waiting
rc-sysinit stop/waiting
Но ни один из тех, кажется, не имеет никакого отношения к rc.local.
Это - больше распределения определенная вещь. (как, Вы не найдете другой rc.local в CentOS).
Теперь приходя к Вашему фактическому вопросу, я думаю, добавляя, что что-либо внутри/etc/init.d/rc.local добирается, запускаются как "сервис", тогда как, что-либо внутри/etc/rc.local просто запустило бы тот сценарий во время начальной загрузки.
Я не действительно уверен в том, почему Ubuntu все еще поддерживает их обоих? (Возможно, кто-то еще мог бы пролить некоторый свет по этой части!!)
/etc/init.d/rc.local
делает остановку, запускают материал на /etc/rc.local
(дополнительную информацию см. в моем ответе).
– goldilocks
31.12.2012, 16:37
/etc/rc.local
сценарий является исполняемым процессом, которым управляют /etc/initd/rc.local
сценарий, точно так же, как (например), /bin/syslog
был бы исполняемый процесс, которым управляют /etc/initd/syslog
. Вы говорите явно это /etc/rc.local
просто сценарий начальной загрузки, по сравнению с. /etc/initd/rc.local
будучи абсолютно отдельным сервисом уровня выполнения.
– goldilocks
01.01.2013, 01:37