Это элементарный скрипт с позиционными параметрами, сохраните приведенный ниже код в файл с именем fill_group.sh
и сделайте его исполняемым с помощью chmod + x fill_group.sh
.
Затем добавьте его в каталог PATH ( / usr / local / bin
) или выполните его в том же каталоге, где он находится, с помощью ./ fill_group.sh
.
#!/bin/sh
#
# Name: fill_group.sh
#
# Usage:
# fill_group.sh <group_name> <user1> <user2> ... <userN>
#
# Description:
# add users to specific group passed as first parameter.
# If the group doesn't exists add it to the system.
set -eu
# Exit if there is not at least 2 args (group,user1)
if [ $# -lt 2 ]; then exit 5; fi
group="${1}"; shift # extract group from arguments
if ! egrep --quiet "^${group}:" /etc/group; then
sudo groupadd "${group}"
fi
for user in "${@}"; do
sudo usermod -a -G "${group}" "${user}"
done
Соответствующая справочная страница для проверки — это страница самой оболочки, bash
, поскольку -f
— это функциональность, предоставляемая оболочкой, это встроенный -bash.
В моей системе (CentOS 7 )это описано в прекрасной справочной странице. grep
может не давать таких же результатов для других дистрибутивов. Тем не менее, если вы запустите man bash
, а затем выполните поиск «-f», это должно дать требуемые результаты.
$ man bash | grep -A1 '\-f file$'
-f file
True if file exists and is a regular file.
$
Короче говоря, фрагмент кода будет исходным файлом /etc/bashrc
, если он существует, и его существование проверяется командой [
, для которой -f
является оператором/параметром.
if...then...else...fi
в сценариях оболочки оценивает статус выхода команд -0 в случае успеха. Поэтому правильно сделать что-то вроде этого:
if ping -c 4 google.com; then
echo "We have a connection!"
fi
В вашем случае это команда [
, также известная как команда test
. Так что было бы совершенно правильно
if test -f /etc/bashrc; then
. /etc/bashrc
fi
Флаг -f проверяет две вещи: :указанный путь существует и является обычным файлом. Если /etc/bashrc
на самом деле является каталогом или отсутствует, тест должен возвращать не -нулевой статус выхода, чтобы сигнализировать об ошибке
Эта команда изначально была отдельной командой, которая не является частью команд оболочки, встроенных -. В настоящее время большинство Bourne-подобных -оболочек уже имеют встроенную -, и это то, что оболочка будет использовать.
Кстати, /etc/bashrc
кажется ненужным дополнительным файлом, который использует ваш администратор или первоначальный автор фрагмента кода. Существует файл /etc/bash.bashrc
, предназначенный для системного -широкополосного rc-файла -для bash, поэтому можно ожидать, что он будет использоваться.
См. также: