暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Shell脚本中的“瑞士军刀”:数组与运算符

Linux技术宅 2024-05-29
488

点击👆Linux技术宅,关注我!!!



前言

    在Shell脚本编程的广阔领域中,数组和运算符无疑是两把不可或缺的“瑞士军刀”。它们以其灵活性和强大的功能,在脚本的各个方面发挥着至关重要的作用。



Shell数组:数据的灵活存储与管理

    Shell数组是一个存储多个值的变量,这些值可以是字符串、数字或其他数据类型,并且它们都被分配给一个唯一的索引。通过索引,可以方便地访问、修改和删除数组中的元素。Shell数组提供了许多有用的功能,使得数据的存储和管理变得更加灵活和高效。

1. 定义数组

    array_name=(value1 value2 value3 ...)

        或者,你也可以逐个为数组元素赋值:

      array_name[0]="value1"
      array_name[1]="value2"
      array_name[2]="value3"

      2. 读取数组元素

          使用索引来读取数组中的值:

        echo ${array_name[0]}  # 输出 "value1"

        3. 读取整个数组

            使用@或*作为索引来读取整个数组:

          echo ${array_name[@]}  # 输出 "value1 value2 value3 ..."

          4. 获取数组长度

              使用#来获取数组的长度(即元素的数量):

            length=${#array_name[@]}
            echo $length # 输出 3

            5. 遍历数组

                使用for循环来遍历数组:

              for element in "${array_name[@]}"do
                  echo $element
              done

              6. 数组切片

                  Bash 4.3+ 版本支持数组切片:

                echo ${array_name[@]:1:2}  # 输出 "value2 value3",从索引1开始,取2个元素


                7. 删除数组元素

                    Bash没有直接删除数组元素的命令,但可以通过重新分配数组来“删除”元素,或者将元素设置为空字符串或 null 。但请注意,这不会更改数组的长度。如果需要删除元素并减少数组的长度,可能需要创建一个新的数组并只包含想要的元素。

                8. 关联数组(Bash 4.0+)

                    Bash 4.0及更高版本还支持关联数组,其中索引可以是字符串或数字。要使用关联数组,首先声明它:

                  declare -A assoc_array
                  assoc_array["key1"]="value1"
                  assoc_array["key2"]="value2"

                  然后,可以像使用普通数组一样使用关联数组。但是,需要使用键(而不是索引)来访问值。

                      请注意,Shell脚本的数组功能可能因你使用的具体Shell(如Bash、Zsh、Dash等)和版本而有所不同。上述示例主要基于Bash。



                  Shell运算符:脚本中的逻辑与算术工具

                      在Shell脚本中,运算符扮演着至关重要的角色,它们提供了逻辑和算术操作的能力,使得脚本能够执行复杂的计算和条件判断。Shell脚本中的运算符主要分为算术运算符、关系运算符、逻辑运算符、字符串运算符和文件测试运算符。这些运算符提供了丰富的逻辑和算术功能,使得Shell脚本能够执行复杂的计算和条件判断,以满足各种自动化任务的需求。

                  1. 算术运算符

                      算术运算符用于执行数值计算。在Shell中,算术表达式通常被放在$(( ))中。常见的算术运算符包括:
                    • 加法(+)
                    • 减法(-)
                    • 乘法(*)
                    • 除法(/)
                    • 取余(%)
                    • 赋值(=)
                    • 自增(++)
                    • 自减(--)
                  • 示例:
                    #!/bin/bash
                    a=5
                    b=3
                    sum=$((a + b))
                    diff=$((a - b))
                    product=$((a * b))
                    quotient=$((a / b))
                    remainder=$((a % b))

                    echo "和: $sum"
                    echo "差: $diff"
                    echo "积: $product"
                    echo "商: $quotient"
                    echo "余数: $remainder"

                    2. 关系运算符
                        关系运算符用于比较两个值的大小或相等性。在Shell中,关系运算符常用于条件判断。常见的关系运算符包括:
                      • 等于(==)
                      • 不等于(!=)
                      • 大于(-gt)
                      • 小于(-lt)
                      • 大于等于(-ge)
                      • 小于等于(-le)
                    注意:在[ ]条件表达式中,== 和 != 需要使用 -eq、-ne 替代。
                    • 示例:
                      #!/bin/bash
                      a=5
                      b=3


                      if [ $a -gt $b ]; then
                          echo "$a 大于 $b"
                      fi


                      if [ $a -lt $b ]; then
                          echo "$a 小于 $b"
                      else
                          echo "$a 不小于 $b"
                      fi

                      3. 逻辑运算符
                          逻辑运算符用于组合多个条件判断。常见的逻辑运算符包括:
                        • 逻辑与(&&)
                        • 逻辑或(||)
                        • 逻辑非(!)
                      • 示例:
                        #!/bin/bash
                        a=5
                        b=3


                        if [ $a -gt 3 ] && [ $b -lt 5 ]; then
                            echo "两个条件都满足"
                        fi


                        if ! [ $a -eq $b ]; then
                            echo "$a 不等于 $b"
                        fi

                        4. 字符串运算符
                            字符串运算符用于比较或操作字符串。常见的字符串运算符包括:
                          • 等于(=)
                          • 不等于(!=)
                          • 字符串长度(${#string})
                        • 示例:
                          #!/bin/bash
                          str1="Hello"
                          str2="World"


                          if [ "$str1" = "$str2" ]; then
                              echo "两个字符串相等"
                          else
                              echo "两个字符串不相等"
                              echo "字符串长度: ${#str1}"
                          fi

                          5. 文件测试运算符
                              文件测试运算符用于检查文件或目录的属性和状态。常见的文件测试运算符包括:
                            • 文件存在(-e)
                            • 目录存在(-d)
                            • 文件可读(-r)
                            • 文件可写(-w)
                            • 文件可执行(-x)
                            • 文件为空(-s)
                          • 示例:
                            #!/bin/bash  
                            file="/path/to/file"

                            if [ -e $file ]; then
                            echo "文件存在"
                            if [ -d $file ]; then
                            echo "并且是一个目录"
                            elif [ -f $file ]; then
                            echo "并且是一个文件"
                            fi
                            if [ -r $file ]; then
                            echo "文件可读"
                            fi
                            if [ -s $file ]; then
                            echo "文件不为空"
                            fi
                            fi
                            上述示例中,涉及到文件的引用,需提供准确路径进行运行或测试。


                            总结




                                Shell数组和运算符是Shell脚本编程中不可或缺的工具。通过灵活使用它们,可以实现复杂的数据存储、管理和计算任务,使Shell脚本更加强大和灵活。


                            推荐阅读

                            学习Nginx(十一):反向代理与Tomcat动静分离配置

                            05-21

                            学习Nginx(七):Location的URI解析

                            05-15


                            分享、在看与点赞

                            👇只要你点,我们就是胖友👇

                            文章转载自Linux技术宅,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                            评论