美文网首页
更多的结构化命令

更多的结构化命令

作者: butters001 | 来源:发表于2023-02-02 23:32 被阅读0次
    1. for 命令
    for var in list
    do
        commands
    done
    
    for var in list; do
        commands
    done
    
    2. 读取列表中的复杂值

    如果列表中有单引号,解决方法:
    1⃣️:将单引号转义
    2⃣️:使用双引号来 定义包含单引号的值

    原始列表
    for item in I don't know if this'll work
    
    处理后
    for item in I don\'t know if "this'll" work
    

    如果某个值包含空格,则必须将其放到双引号内:

    for item in Nevada "New York" "New Mexico"
    

    ⚠️当你使用双引号引用某个值时,shell并不会将双引号当成值的一部分

    3. 从变量中读取值列表
    list="aa bb cc"
    list=$list" dd"
    for item in $list
    do
        echo $item
    done
    

    ⚠️第二行:这是向变量中已有的字符串尾部添加文本的一种常用方法

    4. 从命令中读取值列表
    cat test.txt
    aa bb
    cc
    
    file="test.txt"
    for item in $(cat $file)
    do
        echo $item
    done
    
    输出:
    aa
    bb
    cc
    
    5. 更改字段分隔符

    造成上述问题(aa bb输出不在同一行,但在txt文件里是在同一行保存的)的原因是特殊的环境变量 IFS(内部字段分隔符)
    IFS 环境变量定义了 bash shell 用作字段分隔符的一系列字符。默认情况下,bash shell 会将下列字符视为字段分隔符:
    1⃣️:空格
    2⃣️:制表符
    3⃣️:换行符
    在脚本中临时更改 IFS 的方法:

    IFS=$'\n'        # 只识别换行符
    IFS=$':'         # 只识别冒号
    IFS=$'\n:;"'     # 将换行符、冒号、分号和双引号作为字段分隔符
    
    6. 使用通配符读取目录
    for file in /home/jxc/*
    

    也可以在 for 命令中列出多个目录通配符:

    for file in /home/jxc/* /home/pmy/*
    
    7. 仿 C语言的 for 命令
    for (( i=1; i <= 10; i++ ))
    do
        echo $i
    done
    
    8. 使用多个变量
    for (( a=1, b=10; a <= 10;  a++, b-- ))
    do
    done
    

    ⚠️:只能在 for 循环中定义一种迭代条件(a<=10)

    9. while 命令基本格式
    while test command
    do
    done
    
    while [ command ]
    do
    done
    

    ⚠️:test command 的退出状态码必须随着循环中执行的命令而改变,不然就会陷入死循环

    10. 使用多个测试命令

    ⚠️:只有最后一个测试命令的退出状态码会被用于决定是否结束循环

    var=10
    
    while echo $var
          [ $var -ge 0 ]
    do
        var=$[ $var - 1 ]
    done
    
    11. until 命令

    until 命令与 while 命令相反,只有(最后一个命令的)退出状态码不为0,就会继续执行循环。
    换种说法:(最后一个命令的)退出状态码为0时,会结束循环。

    12. 循环控制-break命令

    break 命令会跳出当前循环。

    break 命令接受单个命令行参数:break n
    默认 n=1,表明跳出的是当前循环。如果将n设为2,那么break命令就会停止下一级的外层循环。

    13. 循环控制-continue命令

    continue 命令会结束本次循环,进入下一次循环。

    同理continue n
    当 n=2 时,会直接进入外层的下一次循环。

    14. 处理循环的输出

    可以对循环的输出使用管道或进行重定向

    for file in /home/jxc/*
    do
        echo $file
    done > output.txt
    
    for file in /home/jxc/*
    do
        echo $file
    done | sort
    
    input="users.csv"
    while IFS=',' read -r loginname name
    do
        echo $loginname
    done < "$input"
    

    相关文章

      网友评论

          本文标题:更多的结构化命令

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