从包含必须通过脚本创建的一批用户数据的文本文件开始,您将使用什么方法将文本文件的每个用户的每个数据传递给作为文件内容的变量跟随?:
#Usuario; Contraseña; Grupo; Activo;
us01; abc01.; grupo01; s;
us02; abc01.; grupo01; S;
us03; abc01.; grupo02; n;
us04; abc01.; grupo02; N;
到目前为止,我创建的脚本是下面代码中显示的脚本,我无法编码的部分是从文本的每一行中获取特定数据(用户、密码、组......)消除“; " 并将其存储在一个变量中,以便为每行的每个数据组创建一个用户(问题在最后指出):
#!/bin/bash
#Script para crear usuarios a partir de los datos en un fichero de texto
#FUNCIONES---------------------------------------------------------
function crearusuario() #nombre=$1, pas=$2, group=$3, act=$4
{
#Miramos si el grupo existe. Si no existe lo creamos
if grep -q "$3" /etc/group #existe, por lo que añadimos usuario
then
useradd -mg "$3" "$1" #creamos usuario añadiéndolo a grupo
echo -e "$1:$2" | chpasswd #creamos passwd a partir del parámetro
else #no existe, por lo que lo creamos y añadimos usuario
addgroup "$3"
useradd -mg "$3" "$1" #creamos usuario añadiéndolo a grupo
echo -e "$1:$2" | chpasswd #creamos passwd a partir del parámetro
fi
}
#PROGRAMA-----------------------------------------------------------
clear
#comprobamos que sea usuario root
if [[ $EUID -ne 0 ]]
then
echo -e "El usuario NO es root, por lo que no se permite ejecutar el script"
exit 1
fi
echo -e "Introduzca la ubicación del fichero:"
#bucle de admisión de input
A=0
while [ $A -eq 0 ];
do
read fichero
#comprobamos que el fichero introducido existe y no está vacío
if [[ -s $fichero ]]
then
A=1
else
echo "ERROR: el fichero no existe o está vacío."
echo "Introduzca de nuevo el nombre y ruta del fichero:\n"
fi
done
#Lectura del fichero línea a línea y asignación a variable
while read -a line
do
encabezado=$(echo "${line[0]}" |grep "#") #saltamos el encabezado
if [ -z $encabezado ]
then
#pasamos a las variables $usuario, $contra, $grupo y $activo los datos
#EN ESTA PARTE NO SÉ CÓMO PROCEDER PARA QUITAR LOS ;
usuario="${line[0]}"
contra="${line[1]}"
grupo="${line[2]}"
activo="${line[3]}"
#creamos el usuario
crearusuario $usuario $contra $grupo $activo
fi
done < $fichero
我将把问题的解决方案分成几个部分:
读取用户数据以“;”分隔的文本文件 并将它们传递给它们对应的变量(由@fedorqui 提出的variant1。最合适的。):
读取用户数据以“;”分隔的文本文件 并将它们传递给它们对应的变量(变体 2。允许您为每个字段单独输出字符):
我希望它有所帮助。一切顺利。