zoukankan      html  css  js  c++  java
  • shell 数组

    一、声明数组

    1)array[key]=value # array[0]=one,array[1]=two
    2)declare -a array # array被当作数组名
    3)array=( value1 value2 value3 ... )
    4)array=( [1]=one [2]=two [3]=three ... )
    5)array="one two three" # echo ${array[0|@|*]},把array变量当作数组来处理,但数组元素只有字符串本身

    二、访问数组

    1)${array[key]} # ${array[1]}

    三、删除数组

    1)unset array[1] # 删除数组中第一个元素
    2)unset array # 删除整个数组

    四、计算数组的长度

    1)${#array}
    2)${#array[0]} #同上。 ${#array[*]} 、${#array[@]}。注意同#{array:0}的区别

    例子:第一个数组程序

    ! /bin/bash
    array=( 1 2 3 4 )
    #输出了1和【@】变量不是这样,试探
    echo "$array[@]"
    #输出数组所有内容
    echo "${array[@]}"
    echo "${array[3]}"
    #数组截取 从0开始2个字符
    echo "${array[@]:0:2}"
    #for循环输出所有数组内容
    for i in  ${array[@]}
    do
    echo $i
    done
    #数组的长度
    echo "${#array[@]}"

    第二个例子:

    [root@localhost ~]# a=(1 2 3 4 5)  注意=号两边没有空格
    [root@localhost ~]# echo ${a[@]}
    1 2 3 4 5

    echo ${a[@]/3/100}   替换命令

    1 2 100 4 5

    第三个例子:
    #! /bin/bash
    i=1
    SUM=`sed -n '$=' test.txt` #计算文件的总行数
    echo "$SUM"
    while read line
    do
        arr[$i]="$line"
        i=`expr $i + 1`
    done < test.txt
    echo "$i"
    i=1
    for i in `seq $SUM` ;do
        echo "${arr[$i]}"
    done

    第四个例子:

    shell脚本随机输出一个文件的25行

    思路 

    1. 首先,用shell脚本按行读取文本,将每一行存入一个数组中
    2. 每次选择一个随机数,来从数组中取数据
    3. 注意,不能是重复的行,所以随机数有标记字段

    #!/bin/bash  
    #文件位置 
    file="./test.txt" 
    #计数器 
    i=0 
     
    #按行读取文件内容,存入arr数组中 
    for line in $(awk '{print $0}' $file) 
    do 
        arr[$i]=$line 
        i=$(expr $i + 1) 
    done 
     
    #构造随机数数组,假定文件只有100行,当random[i]=0时说明第i行没有被读取 
    for i in $(seq 1 100) 
    do 
        random[$i]=0 
    done 
     
    #构造随机数,随机选取25行 
    for ((i=0; i<25;)) 
    do 
        index=$RANDOM%100 
        if [ ${random[$index]} -eq 0 ]; then 
            random[$index]=1 
            echo ${arr[$index]} 
            i=$(expr $i + 1) 
        fi 
    done

  • 相关阅读:
    ASP.NET Web API 中 特性路由(Attribute Routing) 的重名问题
    在 ASP.NET Web API 中,使用 命名空间(namespace) 来作为路由的参数
    【转】使用create_project.py创建cocos2d项目时出错
    WCF使用net.tcp绑定时的注意事项
    WCF:如何将net.tcp协议寄宿到IIS
    关于WCF服务的调试跟踪
    Windows Store Apps 开发转载
    如何让弹出窗口和页面产生联动?
    关于C# wpf DataGrid单元格双击设置单元格内容
    在WPF的DataGrid中对行添加单击事件
  • 原文地址:https://www.cnblogs.com/bluewelkin/p/3980875.html
Copyright © 2011-2022 走看看