1, para bucle
for 变量名 [ in 取值列表 ]
do
循环体
done
Por defecto, el bucle for separa los valores de las variables por espacios. Tenga en cuenta que el número de bucles para el bucle for es fijo.
for val in a b c
do
echo $val
done
Tenga en cuenta que la secuencia de comandos anterior generará abc
El siguiente ejemplo da cuenta de que para crear varios usuarios, es necesario crear un archivo. El formato de cada línea en el archivo es: nombre de usuario contraseña
#!/usr/bin/bash
#判断脚本是否有参数
if [ $# -eq 0 ]; then
echo "usage: `basename $0` file"
exit 1
fi
#希望for处理文件按回车分隔,而不是空格或tab空格
#重新定义分隔符
#IFS内部字段分隔符
IFS=$'\n'
for line in `cat $1`
do
if [ ${#line} -eq 0 ]; then
continue
fi
user=`echo "$line" | awk '{print $1}'`
pass=`echo "$line" | awk '{print $2}'`
id $user &>/dev/null
if [ $? -eq 0 ];then
echo "user $user already exists"
else
useradd $user
echo "$pass" |passwd --stdin $user &>/dev/null
if [ $? -eq 0 ];then
echo "$user is created"
fi
fi
done
2. El ciclo while
while 条件测试
do
循环体
done
Porque for usa un espacio como delimitador, mientras que while puede usar directamente un retorno de carro como delimitador, cuando el archivo necesita ser procesado, la prioridad es while en lugar de for.
#!/usr/bin/bash
#while create user
#会从文件user.txt里面读入一行给user
#当读到文件尾时,read line不会成功
while read line
do
user=`echo "$line" | awk '{print $1}'`
pass=`echo "$line" | awk '{print $2}'`
id $user &>/dev/null
if [ $? -eq 0 ];then
echo "user $user already exists"
else
useradd $user
echo "$pass" |passwd --stdin $user &>/dev/null
if [ $? -eq 0 ];then
echo "$user is created"
fi
fi
done < user.txt