[转帖]shell的for循环

shell,for,循环 · 浏览次数 : 0

小编点评

## Summary of the code The code is about reading a file line by line and processing each line. **Key points:** * The code can be used to process files line by line, regardless of the separator used. * The code supports both spaces and tabs as the separator. * While the code can be used with any separator, it is more suitable for processing files than with spaces, as it avoids the need to escape the special character. * The code uses `IFS` to define the separator, making it more flexible and allowing for different separator combinations. **Specific implementation:** The code uses a `while` loop to read the contents of the file. - It splits the line into user and password parts. - It uses `xargs` to run an `id` command for each user and stores the output. - It checks if the `id` command was successful (return code 0). - It adds the user to the system if it is not already there. **Example:** The code can be used to create a user with the name "John" with the password "password". **Note:** - The code assumes that the file is a regular text file. - The `id` command is used to retrieve the user's ID. - The `&` symbol is used to run the commands in the background.

正文

https://www.jianshu.com/p/e549b9b8d744

 

2020.03.05 17:19:39字数 195阅读 458

最佳推荐
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循环相似的内容:

[转帖]shell的for循环

https://www.jianshu.com/p/e549b9b8d744 2020.03.05 17:19:39字数 195阅读 458 最佳推荐While 适合文件逐行处理For 固定循环While until不固定循环(需要满足条件退出) For 循环默认以空格为分隔符for循环: 将读入的

[转帖]Linux下Shell的for循环语句 第一类:数字性循环

#!/bin/bash for((i=1;i<=10;i++)); do echo $(expr $i \* 3 + 1); done #!/bin/bash for i in $(seq 1 10) do echo $(expr $i \* 3 + 1); done #!/bin/bash for

[转帖]linux shell 中数组的定义和for循环遍历的方法

https://www.cnblogs.com/ysk123/p/11510718.html linux 中定义一个数据的语法为: variable=(arg1 arg2 arg3 ....) 中间用空格分开。数组的下标从0开始。 1 获取下标为n的元素: variable[n] 而且不存在数组下标

[转帖]shell编程之循环语句

目录 一、循环语句for循环for语句的结构嵌套循环 while语句的结构while语句应用示例 until语句的结构until语句示例 二、跳出循环continue跳出循环break跳出循环 三、常用循环脚本实例循环打印9*9乘法表数字累加脚本(1-100)常用转义字符购物shell 计算器正等腰

[转帖]Linux Shell编程 循环语法

https://zhuanlan.zhihu.com/ for循环 for 循环是固定循环,也就是在循环时已经知道需要进行几次循环。有时也把 for 循环称为计数循环。语法: for 变量 in 值1 值2 值3… do 程序 done 在这种语法中,for 循环的次数取决于 in 后面值的个数(以

[转帖]shell 实现行转列、列转行的几种方法

目录 shell 实现行转列、列转行的几种方法awk行转列 xargs行转列 tr列转行参考资料 shell 实现行转列、列转行的几种方法 awk 行转列 以空格为分隔符 awk -F "+" '{for(i=1;i<=NF;i++) a[i,NR]=$i}END{for(i=1;i<=NF;i++

[转帖]linux 批量修改文件格式

将Windows上的shell脚本拷贝到Linux时,脚本的编码格式还是docs,需要改成unix才可执行,在文件不多的情况下可以直接手动更改,但是在脚本文件比较多的时候,手动改起来就太麻烦了,此时就可以使用shell命令批量来进行更改。 批量更改脚本如下: for i in `find . -ty

[转帖]shell 篇 用上今天分享的快捷键以后,我早下班了一小时

每次看着别人操作 shell 的时候,快捷键用得飞起,尤其是那个快速搜索历史命令,避免低效的↑↓键切换历史命令,很装逼有木有。。 废话不多说,下面是我整理的常用快捷键,真的可以提高自己的工作效率的,很不错!~ 一、常用快捷键小技巧 以下快捷键,都是一些常用的,记住这些命令,你的工作效率就会大大提升。

[转帖]shell脚本中$0 $1 $# $@ $* $? $ 的各种符号的意义

概述 shell中有两类字符,一类是普通字符,在Shell中除了本身的字面意思外没有其他特殊意义,即普通纯文本;另一类即元字符,是Shell的保留字符,在Shell中有着特殊的含义。 今天主要介绍一下shell中字符$的各种用法。 转义字符$ 在linux shell脚本中经常用到字符 ,下面是 ,

[转帖]shell脚本中$0 $1 $# $@ $* $? $ 的各种符号的意义

概述 shell中有两类字符,一类是普通字符,在Shell中除了本身的字面意思外没有其他特殊意义,即普通纯文本;另一类即元字符,是Shell的保留字符,在Shell中有着特殊的含义。 今天主要介绍一下shell中字符$的各种用法。 转义字符$ 在linux shell脚本中经常用到字符 ,下面是 ,