Shell basics-day5-loop sintaxis

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

 

Supongo que te gusta

Origin blog.csdn.net/xiaoan08133192/article/details/109176719
Recomendado
Clasificación