shell基础(六)--字符串和数组,shell--字符串数组


对文本处理,单独用shell来处理还是比较薄弱。所以shell就引用了awk and sed这两个命令。我们今天不说这个

一 字符串
  字符串是shell编程中最常用最有用的数据类型,因为你定义一个变量,存的值就是一个字符串,字符串可以用单引号,也可以用双引号,也可以不用引号

 A=1
name="lottu"
feel='happy'

  说下字符串的处理

1. 拼接字符串
       echo "${name} feels ${feel}"    #即空格就是字符串拼接
2. 求字符串长度 echo ${#name} echo `expr length $name` echo ${name} | awk '{print length($0)}' #awk里面拥有丰富的函数,所以可以完全借鉴于它。
3.截取字符串 echo ${name:1:4} #输出ottu。下标是从0开始;这跟其他语言不一样。 expr substr "$name" 1 4 echo ${name}|awk '{print substr($0,2,4)}' #输出为ottu。
4. index检索子串--返回第一次出现的位置;若找不到,则返回1 expr index "$name" lo
5. match匹配子串 --返回匹配到子串的长度;若找不到,则返回0 expr match "$name" lott #返回4
6. 替换子串${string/substring/replacement}表示仅替换一次substring相配字符,而${string//substring/replacement}表示为替换所有的substring相配的子串 str="you and me,go your home.OK? you" echo ${str/you/tom} echo ${str//you/tom}

 总结:灵活运用命令expr,以上实现效果都可以用awk来实现。本人对awk很熟悉;大家有什么文本处理的问题,可以找我。


 

  二 数组

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0

1. 定义数组
    在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的一般形式为:
    array_name=(value1 ... valuen)
    vname=("lottu" "li0924" "0924" "tom")

2. 打印数组值
    echo ${vname[2]} #输出"0924" ;大家理解?因为shell数组的下标是从0开始。
    使用使用@ 或 * 可以获取数组中的所有元素
    echo ${vname[@]}  or echo ${vname[*]}

3.获取数组长度
    其实跟字符串长度差不多
    echo ${#vname[*]} #输出为4;数组的个数
    求数组某个下标的值的长度
   echo ${#vname[1]}  #输出为6

4. 删除数组
    unset命令
    unset varray_name[n]  :删除第n+1个
    unset varray_name       删除数组 varray_name

5. 获取部分数组--格式:${数组名[@或*]:起始位置:长度}
  $ vname=("lottu" "li0924" "0924" "tom")
  $ echo ${vname[*]:0:2}
     lottu li0924
 
6. 扩展read 命令来定义数组使用参数a
   $ read -p "please input your number: " -a num 
    please input your number: 1 5 6 8
   $ echo ${num[*]}
    1 5 6 8 

 


shell逐行取得字符并赋值给数组

因为你前面使用了管道把数据传给 while,管道会启动一个“子进程”,while是在子进程中执行的,子进程中的变量是不会返回到父进程中的,所以你 while 结束后再看 arr 是空的,因为 while 里的 arr 是子进程的变量。改成如下就可以了:
i=0while read linedo arr[${i}]=`echo ${line} | awk -F":" '{print $1}'` (( ++i ))done < a.txtecho "${arr[@]}"
 

linux里A=“1 2 3”,$A是个数组?还是一个字符串?

楼主说的应该是shell中的,$A是字符串。
字符串转数组

str="12 34 56"

arr=($str)

count=${#arr[@]}

for (( i=0;i<count;i=i+1))

do

echo "$i=arr[$i]"

done
doudouclever.blog.163.com/...21354/
 

相关内容

    暂无相关文章