zoukankan      html  css  js  c++  java
  • shell基础语法:数据类型和结构:字符串,数组,map(关联数组)

    参考:

    https://zhuanlan.zhihu.com/p/289274320(shell常用数据结构)

    https://www.runoob.com/linux/linux-shell-array.html(shell数组)

    基本

    Shell是弱类型的语言

    没有向C、java那样的强类型变量,都是弱类型变量。都会统一存储为字符串类型

    字符串

    字符串(String)就是一系列字符的组合。字符串是 Shell 编程中最常用的数据类型之一(除了数字和字符串,也没有其他类型了)。

    定义

    your_name="runoob.com"

    支持3种方式

    name=nick
    name='nick'
    mame="nick"

    三种形式的区别:

    1) 由单引号''包围的字符串:

    任何字符都会原样输出,在其中使用变量是无效的。

    字符串中不能出现单引号,即使对单引号进行转义也不行。

    2) 由双引号""包围的字符串:

    如果其中包含了某个变量,那么该变量会被解析(得到该变量的值),而不是原样输出。

    字符串中可以出现双引号,只要它被转义了就行。

    3) 不被引号包围的字符串

    不被引号包围的字符串中出现变量时也会被解析,这一点和双引号" "包围的字符串一样。

    字符串中不能出现空格,否则空格后边的字符串会作为其他变量或者命令解析。

    拼接字符串

    your_name="runoob"
    # 使用双引号拼接
    greeting="hello, "$your_name" !"
    greeting_1="hello, ${your_name} !"
    echo $greeting  $greeting_1
    # 使用单引号拼接
    greeting_2='hello, '$your_name' !'
    greeting_3='hello, ${your_name} !' #无效
    echo $greeting_2  $greeting_3
    
    #输出结果
    hello, runoob ! hello, runoob !
    hello, runoob ! hello, ${your_name} !

    获取字符串长度

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

    提取部分字符

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

    string="runoob is a great site"
    echo ${string:1:4} # 输出 unoo

    第一个字符的索引值为 0,包含前后两个下标

    查找字符

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

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

    数组

    定义

    #语法
    数组名=(值1 值2 ... 值n)
    
    #方法1
    array_name=(value0 value1 value2 value3)
    
    #方法2
    array_name=(
    value0
    value1
    value2
    value3
    )
    
    #方法3
    array_name[0]=value0
    array_name[1]=value1
    array_name[n]=valuen

    读取元素

    读取一个

    ${数组名[下标]}
    #例子 valuen
    =${array_name[n]}

    使用 @ 符号可以获取数组中的所有元素(待实践)

    ${array_name[@]} #可以使用for in变例

    获取数组的长度

    使用#获取长度

    # 取得数组元素的个数
    length=${#array_name[@]}
    # 或者 length=${#array_name[*]}
    # 取得数组单个元素的长度 lengthn=${#array_name[n]}

    关联数组:map

    使用 declare -A

    bash 版本不对,需4.0以上才支持关联数组。declare -A 在低版本的bash中不支持这个功能。

    定义

    #方式1
    declare -A m
    m["zh"]="中国"
    
    #方式2
    declare -A m=(["zh"]="中国" ["cn"]="美国")

    = 的前后没有任何空格, 赋值语句也是一样的. 初始化的时候是 小括号 + 空格 的方式进行初始化的

    获取

    ${m[key]}

    map的长度, 所有key, 所有value

    所有的key: ${!m[@]}, 带有 !. 注意这里的结果是一个元组
    
    所有的value: ${m[@]}, 不带 !. 注意这里的结果是一个元组
    
    长度: ${#m[@]}, 带有的是 #

    遍历key

    for key in ${!m[@]}; do
        echo "key:$key"
        echo "key:$key, val:${m[$key]}"
    done

    遍历value

    for val in ${m[@]}; do
        echo "val:$val"
    done
  • 相关阅读:
    Hive数据倾斜原因和解决办法(Data Skew)
    Hive简介
    SQL---公共表表达式(CTEs)
    SQL面试题---topN问题
    SQL---分页查询
    SQL---自连接(self join)
    SQL---关联子查询(correlated subquery)
    SQL---CASE表达式
    SQL查询语句执行顺序
    SQL---窗口函数(window function)
  • 原文地址:https://www.cnblogs.com/tkzc2013/p/15349686.html
Copyright © 2011-2022 走看看