美文网首页
六、set的使用和数组

六、set的使用和数组

作者: 胖虎喜欢小红 | 来源:发表于2019-12-20 19:32 被阅读0次

    set

    set -u

    当脚本中遇到未定义的变量时,默认是忽略。
    有时候这并不是开发者想要的。
    假如有未定义的变量,应该报错,并且终止脚本继续运行。
    set -u 就可以办到
    set -u //空字符串会继续执行

    #!/usr/bin/bash
                                        //空字符串 set -u 会继续执行
    
    echo $a
    echo hello
    [root@biudefor jiaoben]# bash set.sh 
    
    hello
    --------------------------- 我是一条分割线
    #!/usr/bin/bash
    set -u
    
    echo $a
    echo hello
    [root@biudefor jiaoben]# bash set.sh 
    set.sh: line 4: a: unbound variable
    

    注意

    set -u
    
    a=`ls |grep 'asfdasdf'`
    echo "|$a|"
    
    # -u  只针对未定义的变量有效
    # 这种情况,变量的值会是一个空字符串
    # 所以脚本会继续执行
    

    set -e

    set -e 的作用就是:
    在脚本执行中,有任何命令的返回值是非 0 的情况,则正在运行的脚本则会退出。

    #!/usr/bin/bash
    
    haha
    echo hello
    [root@biudefor jiaoben]# bash set.sh               //默认脚本中出现错误命令会继续执行
    set.sh: line 3: haha: command not found
    hello
    
    --------------------------- 我是一条分割线
    
    #!/usr/bin/bash
    set -e
    
    haha
    echo hello
    [root@biudefor jiaoben]# bash set.sh             //设置了set -e后,一报错就停止脚本运行
    set.sh: line 4: haha: command not found
    

    但是,对于一组含有管道的命令无效,比如:

    #!/usr/bin/env bash
    set -e
    foo | echo "hello"    # 注意这里有管道符
    echo  "程序会继续运行"
    

    解决办法

    set -o pipefail

    需要和 set -e 配合使用。
    如果设置,如果管道中的所有命令都成功退出,整条命令的返回值才是 0。否则返回非 0。
    默认情况下禁用此选项

    #!/usr/bin/bash
    set -e
    set -o pipefile
    
    haha | grep hello
    echo hello
    
    [root@biudefor jiaoben]# bash set.sh 
    set.sh: line 3: set: pipefile: invalid option name
    

    数组

    数组中的值: wukong  bajie  shaseng
    值的索引号: 0    1     2

    数组的索引只能是 整数

    [root@biudefor jiaoben]# a=(1 2 3)             //()定义数组
    [root@biudefor jiaoben]# echo ${a[2]}          //读取数组里的值 ${数组名[索引]}
    3
    [root@biudefor jiaoben]# echo ${a[*]}          //*和@ 列出所有的值
    1 2 3
    

    定义数组,并且其值从命令的结果中获取

    # 把文件中的每一行作为数组中的一个值
    [root@biudefor jiaoben]# line=(`cat /etc/passwd`)
    [root@biudefor jiaoben]# a=($(cat /etc/passwd))
    

    declare 声明关联数组

    数组的索引可以是 普通字符串
    声明关联数组使用 A 选项

    declare -A  数组名称
    
    [root@biudefor jiaoben]# declare -A d
    

    2. 添加值

    - 每次添加一个值,可以追加
    数组名[索引]=值
    [root@biudefor jiaoben]# d[1]=hello
    [root@biudefor jiaoben]# echo ${d[1]}
    hello
    [root@biudefor jiaoben]# d[2]=hi
    [root@biudefor jiaoben]# echo ${d[2]}
    hi
    [root@biudefor jiaoben]# echo ${d[*]}
    hello hi
    
    - 一次添加所以的值,不可以追加,每次都会覆盖上次的值

    每个值之间使用空格隔开

    [root@biudefor jiaoben]# d=(["3"]="dog" ["4"]="cat")
    [root@biudefor jiaoben]# echo ${d[*]}
    dog cat
    [root@biudefor jiaoben]# echo ${d[3]}
    dog
    

    相关文章

      网友评论

          本文标题:六、set的使用和数组

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