Использовать useradd
на Linux, по крайней мере.
Использовать crypt(3)
для генерации зашифрованного пароля, и затем делают следующее для каждого:
useradd -m -g [group] -p [crypt output] [user]
-m
создает корневой каталог. -g
устанавливает начальную группу входа в систему пользователя. -p
устанавливает зашифрованный пароль, как возвращено crypt(3)
(необходимо отметить, что эта опция может быть неподходящей, поскольку зашифрованный пароль будет видим пользователям, перечисляющим процессы, когда пользователь будет создан).
Вы, вероятно, захотите использовать другие опции также (в предположении, по крайней мере -s
), читайте man 8 useradd
для тех.
Во-первых, я предполагаю что использование ls
просто пример. Вы не можете проанализировать вывод ls
в любой оболочке, потому что это неоднозначно. Читайте, Почему Вы не должны анализировать вывод ls (1), если это - новости Вам. В любой оболочке, для получения списка файлов, подстановочных знаков использования, например. files=(*)
.
В zsh, как в других оболочках, результат замены команды разделяется на слова в пробельных символах (более точно, согласно значению IFS
). (В отличие от других оболочек, результат замены команды не подвергается globbing в zsh.) Поэтому, если вывод ls
команда
hello world
wibble
затем files=($(ls))
наборы files
массив для содержания 3 элементов: hello
, world
и wibble
.
Если замена команды находится в двойных кавычках, то никакое разделение не выполняется. Можно выполнить пользовательское разделение с флагами расширения параметра. Используйте @
флаг, чтобы указать, что результатом разделения должен быть массив (странно, необходимо сохранить расширение в двойных кавычках, т.е. "${(@)…}"
, даже при том, что дважды заключенная в кавычки строка расширится до нескольких слов). Для разделения используйте s
флаг, например. "${(@s:,:)…}"
разделять в запятых; f
отметьте разделения в новых строках только.
files=("${(@f)$(ls)}")
Обратите внимание, что надлежащий способ выполнить итерации по массиву в целом for f in $files[@]
, как $files
снимает изоляцию с пустых элементов (здесь, это не имеет значения, потому что элементы не будут пусты).
print $f
интерпретирует $f
как переключатель, если это начинается с a -
и разворачивает обратные косые черты в $f
. Использовать print -r -- $f
, или print -rn -- $f
если Вы не хотите добавлять новую строку после строки.
В zsh можно использовать расширение оболочки, которое не выполняет слово, разделяющее по умолчанию. Попробовать
for f in /path/to/files/*; do
print ${f}
done
(…)
необходимы так, чтобыfiles
массив и не строка (который содержал бы конкатенацию строк от команды, отменяя разделение, сделанное(f)
). 2. Сfoo=$'one\n\nthree', contrast
распечатайте-rl $ {(f) нечто}' иprint "${(@f)foo}"
. Двойные кавычки необходимы для сохранения пустых строк, от которых Вы не доберетесьls
но может произойти с другими командами. Париж – Gilles 'SO- stop being evil' 26.11.2012, 14:35