美文网首页
shell的for循环

shell的for循环

作者: 水平号 | 来源:发表于2020-03-05 17:19 被阅读0次

    最佳推荐
    While 适合文件逐行处理
    For 固定循环
    While until不固定循环(需要满足条件退出)

    For 循环默认以空格为分隔符
    for循环: 将读入的内容以IFS(shell中的环境变量,Internal Field Seperator,字段分隔符)为界分隔,然后将各个分隔开的内容,逐一读入变量line。本质上说,for循环读取的是字段,只不过可以设置IFS为\n这样能够逐行读取。

    *while循环:会将每行的内容读入到line变量*

    如果希望for处理文件按回车分隔,则需重新定义分隔符
    IFS:内部字段分隔符
    IFS=$'\n'

    for循环的特性
    
    只要有值赋给i,就进行循环,有几个值就循环几次。
    但循环体调用或不调用被赋值后的i, 都不会影响循环体里面的执行。
    for i in 1 2 3
    do
    echo "test"
    done
    

    示例:新建用户

    #!/usr/bin/bash
    #判断脚本是否带参数
    if [ $# -eq 0 ];then
            echo "usage: `basename $0` file"
            exit 1
    fi
    #判断文件是否存在
    if [ ! -f $1 ];then
            echo "error file"
            exit 2
    fi
    
    
    #for默认使用空格为分隔符,for不太适合处理文件,while循环更适合处理文件
    #如果希望for 处理文件按回车分隔,而不是按空格或tab空格
    #重新定义分隔符
    #IFS内部字段分隔符
    #IFS=$'\n'
    
    IFS='
    '
    ##for循环
    for line in $(cat $1)
    do
            if [ ${#line} -eq 0 ];then                   #for遇到空行会停止运行脚本(认为脚本已处理完成),所以需要判 
                                                                    #断空行,遇到空行继续把脚本执行下去。
                    contiune
            fi
            user1=`echo "$line" |awk '{print $1}'`
            pass=`echo "$line" |awk '{print $2}'`
    
            echo $user1 |xargs id &>/dev/null
    
            if [ $? -eq 0 ];then
                    echo "user $user1 already exists"
            else
                    useradd $user1
                    echo "$pass" |passwd --stdin $user1 &>/dev/null
                    if [ $? -eq 0 ];then
                            echo "$user1 is created."
                    fi
            fi
    done
    ##另一种 while循环
    #IFS=$'\n'                while不需要重置IFS,默认可以按行处理。
    
     while read line
    do
            user1=`echo "$line" |awk '{print $1}'`
            pass=`echo "$line" |awk '{print $2}'`
    
            echo $user1 |xargs id &>/dev/null
            if [ $? -eq 0 ];then
                    echo "user $user1 already exists"
            else
                    useradd $user1
                    echo "$pass" |passwd --stdin $user1 &>/dev/null
                    if [ $? -eq 0 ];then
                            echo "$user1 is created."
                    fi
            fi
    done < "$1"
    
    

    相关文章

      网友评论

          本文标题:shell的for循环

          本文链接:https://www.haomeiwen.com/subject/nwpwlhtx.html