shell字符串与数组总结

博客主页:http://blog.csdn.net/minna_d

1. 计算字符串长度:

echo ${#str}

2. 按字符截取字符串:

${word:begin:length}

3.借助% 、%%、#、##对字符串的切割:

%:从右向左非贪婪匹配

%%:从右向左贪婪匹配

#:从左向右非贪婪匹配

##:从左向右贪婪匹配

用法示例: ${str%.*} ${str%%.*} ${str#*.} ${str##*.}

PS:"."这里仅仅只是一个普通的点,而不是任意字符

[[email protected] ~/q/data/tmp_data]# URL="hotel.qunar.com"
[[email protected] ~/q/data/tmp_data]# echo ${URL%.*}
hotel.qunar
[[email protected] ~/q/data/tmp_data]# echo ${URL%%.*}
hotel
[[email protected] ~/q/data/tmp_data]# echo ${URL#*.}
qunar.com
[[email protected] ~/q/data/tmp_data]# echo ${URL##*.}
com

4.利用IFS分割字符串

IFS为内置字段分隔符,这里有一篇关于IFS很好的说明:http://blog.chinaunix.net/uid-22566367-id-381955.html

PS:疑问,对于str=`ls -al`这种方式我弄不明白生成的到底是一个数组?还是算做一中字符串

[[email protected] ~/q/data/tmp_data]# IFS="\n"
[[email protected] ~/q/data/tmp_data]# str=`ls -al`
[[email protected] ~/q/data/tmp_data]# echo $str
总用量 20
drwxr-xr-x  2 root root 4096 1月   9 13:52 .
drwxr-xr-x 36 root root 4096 1月   7 19:53 ..
-rw-r--r--  1 root root   12 1月   9 13:51 1
-rw-r--r--  1 root root   10 1月   9 13:52 2
-rw-r--r--  1 root root   28 1月   9 13:51 2~
[[email protected] ~/q/data/tmp_data]# echo ${str[@]}
总用量 20
drwxr-xr-x  2 root root 4096 1月   9 13:52 .
drwxr-xr-x 36 root root 4096 1月   7 19:53 ..
-rw-r--r--  1 root root   12 1月   9 13:51 1
-rw-r--r--  1 root root   10 1月   9 13:52 2
-rw-r--r--  1 root root   28 1月   9 13:51 2~
[[email protected] ~/q/data/tmp_data]#
[[email protected] ~/q/data/tmp_data]# echo ${str[*]}
总用量 20
drwxr-xr-x  2 root root 4096 1月   9 13:52 .
drwxr-xr-x 36 root root 4096 1月   7 19:53 ..
-rw-r--r--  1 root root   12 1月   9 13:51 1
-rw-r--r--  1 root root   10 1月   9 13:52 2
-rw-r--r--  1 root root   28 1月   9 13:51 2~
[[email protected] ~/q/data/tmp_data]# echo ${#str[@]}
1

第二部份:

1.计算数组长度:

${#array[@]}

2.列出数组索引:

${!array[*]}或者${!array[@]}

3.打印数组中所有值:

${array[*]}或者${array[@]}

4.shell中遍历数组元素:

for str in ${array[@]};

do

echo $str;

done

5.定义空数组

uset array

普通数组:

1.初始化:

第一种初始化

[[email protected] ~/q/data/tmp_data]# array_origin=(1 2 3 4)
[[email protected] ~/q/data/tmp_data]# echo ${#array_origin[@]}
4

第二种初始化

[[email protected] ~/q/data/tmp_data]# arra_origin[0]=00
[[email protected] ~/q/data/tmp_data]# arra_origin[1]=11
[[email protected] ~/q/data/tmp_data]# arra_origin[2]=22
[[email protected] ~/q/data/tmp_data]# arra_origin[3]=33

2.访问方式:

[[email protected] ~/q/data/tmp_data]# for item in ${arra_origin[@]}; do echo $item; done
00
11
22
33
<strong>PS:在awk中遍历数组的方式:</strong>
<span style="color:#FF6666;"><strong>i 代表的是key,而非value,切忌!切忌!</strong></span>
[[email protected] ~/q/data/tmp_data]# echo "1" | awk 'BEGIN{array[1]=11; array[2]=22;array[3]=33;array[4]=44} {for( i in array) {print i} }'
1
2
3
4
[[email protected] ~/q/data/tmp_data]# echo "1" | awk 'BEGIN{array[1]=11; array[2]=22;array[3]=33;array[4]=44} {for( i in array) {print array[i]} }'
11
22
33
44

关联数组:

第一种显示申明初始化:

[[email protected] ~/q/data/tmp_data]# declare -A ass_array_1

第二种内嵌索引值列表初始化:

[[email protected] ~/q/data/tmp_data]# ass_array_2=(["host1"]="192.168.1.23" ["ip1"]="192.168.1.23")

赋值:

[[email protected] ~/q/data/tmp_data]# ass_array["host"]="192.168.1.23"
[[email protected] ~/q/data/tmp_data]# ass_array["ip"]="192.168.1.23"

访问:

根据key查询value

[[email protected] ~/q/data/tmp_data]# echo ${ass_array_1["host"]}
192.168.1.23

查看所有key

[[email protected] ~/q/data/tmp_data]# echo ${!ass_array_1[*]}
host1 ip

查看所有value

[[email protected] ~/q/data/tmp_data]# echo ${ass_array[*]}
192.168.1.23 192.168.1.23

时间: 2024-08-28 11:09:56

shell字符串与数组总结的相关文章

shell字符串和数组

字符串 : 1.单引号: str = 'value' 单引号字符串的限制: 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的: 单引号字串中不能出现单引号(对单引号使用转义符后也不行); 2.双引号: str = "value is \"${name}\" \n" str = "value is , ${name}\n" 双引号的优点: 双引号里可以有变量 双引号里可以出现转义字符 3.获取字符串长度 : string="a

shell 字符串转数组

#!/bin/bash string="hello,shell,split,test" #将,替换为空格 array=(${string//,/ }) for var in ${array[@]} do echo $var done 输出 bogon:conf macname$ ./test.sh hello shell split test 还可以写成 #!/bin/bash string="hello,shell,split,test" array=(`echo

shell入门笔记2:字符串、数组、echo与printf

说明: 本文是关于http://c.biancheng.net/cpp/shell/的相关笔记 shell字符串 字符串可以用单引号,也可以用双引号,也可以不用引号. 1 #!/bin/bash 2 3 ##字符串 4 5 #不加引号: 6 #无法出现; 7 echo a 8 echo a;b 9 10 #单引号: 11 #单引号里的任何字符都会原样输出,单引号字符串中的变量替换是无效的: 12 #单引号字符串中不能出现单引号(对单引号使用转义符后也不行). 13 str='this is a

shell 之解释器、变量、字符串、数组

1.Shell简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务.Shell 编程跟 java.php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了常见的有: Bourne Shell(/usr/bin/sh或/bin/sh) Bourne Again Shell(/bin/bash)

【Linux】shell字符串分割、数组访问、条件判断

参考资料: shell字符串分割再循环:http://www.shangxueba.com/jingyan/1633455.html linux shell中 if else以及大于.小于.等于逻辑表达式介绍:http://www.jb51.net/article/34332.htm Shell数组:shell数组的定义.数组长度:http://c.biancheng.net/cpp/view/7002.html shell 数组长度:http://blog.csdn.net/shaobingj

Shell 脚本知识回顾 (三) —— 替换、运算符、字符串、数组

一.Shell替换:Shell变量替换,命令替换,转义字符 如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. 举个例子: #!/bin/bash a=10 echo -e "Value of a is $a \n" 运行结果: Value of a is 10 这里 -e 表示对转义字符进行替换.如果不使用 -e 选项,将会原样输出: Value of a is 10\n 下面的转义字符都可以用在 echo 中: 转义字符

shell切分字符串到数组

shell切分字符串到数组 问题: 对于’aa,bb,cc,dd,ee’这样的字符串输出采用,分隔开的aa bb cc dd ee aa:bb is ok:/home/work按照":"分割开来的aa      bb is ok      /home/work 解决方法1: #!/bin/bash var=’aa,bb,cc,dd,ee’ var=${var//,/ } #这里是将var中的,替换为空格 for element in $var do echo $element done

shell 脚本-关联数组

shell 的关联数组 Shell Associative Array   bashi没有原生的对于类似hash table的支持,不像perl或python.下标数组元素是通过数组下标(数组下标可以是算术表达式,其结果必须是一个整数)来访问的,但是这种访问方式在表达某些关联性很强的数据时会存在限制.shell 提供了另外一种数组,其可以使用任意的字符串作为下标(不必是整数)来访问数组元素.这种数组叫做关联数组(associative array).关联数组的下标和值称为键值对,它们是一一对应的

Linux Shell 创建序列数组

关于linux数组定义,以及生成方法,请看:linux shell 动态生成 数组系列 seq使用技巧 .这里我主要说的是高效生成list 字符串,还有数组方法. 一.seq方法生成: 1 2 3 [[email protected] shell]$ aNumList=$(seq 100); [[email protected] shell]$ echo $aNumList 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 2