• Shell学习--Shell变量


    一、普通变量

    1.定义变量时直接赋值,不需要 $ 等特殊符号

    name="Tom"

      注:变量名和等号之间不能有空格

    2.使用一个定义过的变量,只要在变量名前面加 $ 符号即可。

      花括号是为了帮助解释器识别变量的边界,适当的时候可以不加,推荐都加。

    1. name="Tom"
    2. echo $name
    3. echo ${name}

    3.已定义的变量,可以被重新定义。

      第二次赋值的时候不能写$your_name="alibaba",使用变量的时候才加美元符($)

    1. name="Tom"
    2. echo $name
    3. name="Jack"
    4. echo $name

    4.使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

    1. name="Tom"
    2. readonly name
    3. name="Jack"
    4. #会报错

    5.使用 unset 命令可以删除变量。

      变量被删除后不能再次使用,unset 命令不能删除只读变量。

    1. name="Tom"
    2. unset name
    3. echo $name
    4. #无输出

    二、Shell 字符串

    1.字符串可以用单引号,也可以用双引号,也可以不用引号。

      ①单引号:

    str='this is a string'

      单引号字符串的限制:

    • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
    • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

      ②双引号:

    1. name="Tom"
    2. str="Hello, I am \"$name\"! \n"
    3. echo -e $str

      输出结果:

    Hello, I am "Tom"! 

      双引号的优点:

    • 双引号里可以有变量
    • 双引号里可以出现转义字符

    2.拼接字符串

    1. name="Tom"
    2. # 使用双引号拼接
    3. greeting="hello, "$name" !"
    4. greeting_1="hello, ${name} !"
    5. echo $greeting  $greeting_1
    6. # 使用单引号拼接
    7. greeting_2='hello, '$name' !'
    8. greeting_3='hello, ${name} !'
    9. echo $greeting_2  $greeting_3

      输出结果:

    1. hello, Tom ! hello, Tom !
    2. hello, Tom ! hello, ${name} !

     3.获取字符串长度

    1. string="abcd"
    2. echo ${#string}   # 输出 4

    4.变量为数组时,${#string} 等价于 ${#string[0]}:

    1. string="abcd"
    2. echo ${#string[0]}   # 输出 4

    5.提取子字符串

      以下实例从字符串第 2 个字符开始截取 2 个字符:

    1. string="Tom is a great boy"
    2. echo ${string:1:2} # 输出 om

    6.查找子字符串

      查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):

    1. string="runoob is a great site"
    2. echo `expr index "$string" io`  # 输出 4

    三、Shell 数组

    bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似于 C 语言,数组元素的下标由 0 开始编号。

    1.在 Shell 中,用括号来表示数组

      数组元素用"空格"符号分割开。定义数组的一般形式为:

      数组名=(值1 值2 ... 值n),例如:

    array=(val0 val1 val2 val3)

    2.可以单独定义数组的各个分量,可以不使用连续的下标,而且下标的范围没有限制。

    1. array[0]=val0
    2. array[1]=val1
    3. array[2]=val2

    3.  读取数组元素值的一般格式是:

      ${数组名[下标]}

    val0=${array[0]}

    4.使用 @ 或 * 符号可以获取数组中的所有元素,例如:

    1. echo ${array[@]}
    2. # 或
    3. echo ${array[*]}

      输出结果:

    val0 val1 val2

    5.获取数组长度的方法与获取字符串长度的方法相同,例如:

    1. # 取得数组元素的个数
    2. length=${#array[@]}
    3. # 或者
    4. length=${#array[*]}
    5. # 取得数组单个元素的长度
    6. lengthn=${#array[n]}

    四、关联数组

    Bash 支持关联数组,可以使用任意的字符串、或者整数作为下标来访问数组元素。

    1.关联数组使用 declare 命令来声明,语法格式如下:

    declare -A array_name

       -A 选项就是用于声明一个关联数组,关联数组的键是唯一的。

      我们创建一个关联数组 site,并创建不同的键值:

    declare -A site=(["google"]="www.google.com", ["runoob"]="www.runoob.com", ["taobao"]="www.taobao.com")

    2.也可以先声明一个关联数组,然后再设置键和值:

    1. declare -A site
    2. site["google"]="www.google.com"
    3. site["runoob"]="www.runoob.com"
    4. site["taobao"]="www.taobao.com"

    3.访问关联数组元素可以使用指定的键,格式如下:

    array_name["index"]

      可以通过键来访问关联数组的元素:

    1. declare -A site
    2. site["google"]="www.google.com"
    3. site["runoob"]="www.runoob.com"
    4. site["taobao"]="www.taobao.com"
    5. echo ${site["runoob"]}
    6. # 输出 www.runoob.com

    4.在数组前加一个感叹号 ! 可以获取数组的所有键,例如:

    1. declare -A site
    2. site["google"]="www.google.com"
    3. site["runoob"]="www.runoob.com"
    4. site["taobao"]="www.taobao.com"
    5. echo "数组的键为: ${!site[*]}"
    6. echo "数组的键为: ${!site[@]}"

      输出的结果为:

    1. 数组的键为: google runoob taobao
    2. 数组的键为: google runoob taobao

    五. 多行注释还可以使用以下格式:

    1. :<<EOF
    2. 注释内容...
    3. 注释内容...
    4. 注释内容...
    5. EOF

    参考:

            ​​​​​https://www.runoob.com/linux/linux-shell-variable.html

            https://www.runoob.com/linux/linux-shell-array.html

  • 相关阅读:
    JAVA 实现PDF转图片(pdfbox版)
    移动同是可以璇转
    509.斐波那契数列
    while 与 for
    lv6 嵌入式开发-Flappy bird项目(信号机制、定时器功能实现)
    Qt写的同一程序在不同电脑上一个可以进行TCP通信,一个无法进行TCP连接
    DOM0、DOM2、DOM3 事件
    GB28181安防视频融合汇聚平台EasyCVR如何实现视频画面自定义标签?
    SPA项目开发之CRUD+表单验证
    Java框架随笔
  • 原文地址:https://blog.csdn.net/qq_44786250/article/details/126208129