shell 中数组学习
因为应用shell的时间不是太长。对于数组在实际项目中没有接触过。今天在需要把相似于:a=1,2,3,4这种东西转换。
之前用的方法是用awk,分别取出。所以今天想是否有更好更简洁的方法----就想到数组了。
先解决样例中的问题,比如
my_num="one,two,three,four"
将其切割开:
OLD_IFS="$IFS"
IFS=","
arr=($my_num)
IFS="$OLD_IFS"
for s in ${arr[@]}
do
echo "$s"
done
输出为:
one
two
three
four
以下是比較具体的关于数组的知识:
一、数组和字符串
Array[3] = "a b c" echo $Array[1] 输出b,
str=“a b c” Array = ($str) echo$Array[1],相同输出b,要注意: Array = ($str)中的右值的括号不能缺
上面这个就是我们常说的把字符串放到一个数组中。也能够理解为动态数组。比C和C++简单多了
计算字符串长度可用的三种方法:
echo “$str”|awk '{print length($0)}'
expr length “$str”
echo “$str”|wc -c
可是第三种得出的值会多1,可能是把结束符也计算在内了
推断字符串为空的方法有三种:
if [ "$str" = "" ]
if [ x"$str" = x ]
if [ -z "$str" ]
二、其它类型的数组
arr=(123 34 3 5) echo $arr。输出123。在这里等同于echo ${arr[0]};
echo ${arr[1]},输出34,注意格式,除了首地址。必需要加上{},否则会出错
三、数组的长度和遍历
length=${#array[@]}----数组的长度,这里的长度是最大下标
echo ${array[@]}-------输出数组所有元素
array[1]=5--------------向数组的某个元素赋值和标c的语法一样
echo ${array[@]:1:2}---输出的是array[0]和array[1]的值
echo ${array[@]:2}-----输出数组第三个元素以后的值
echo ${array[@]::2}-----输出数组下标小于2的值
$ echo ${#array[3]} ----取得元素3的长度
unset array--------------清除array
array=------------------清空array,赋给array空值
遍历字符串方法一
for ((i=0;i<${#array[@]};i++))
do
echo ${array[$i]}
done
遍历字符串方法二
str="a --m"
for i in $str
do
echo $i
done
用while遍历
len=${#arr[@]}
i=0
while [ $i -lt $len ]
do
echo ${arr[$i]}
let i++
done
四、其它:
Array[3] = "a b c"和Array[3] = a b c这两个是等价的;假设Array[3] = "a "bc"",想要查找",用awk是找不到的。单引號
是能够找到的,就是双引號找不到;我们能够用截取字符串的方法来推断是否双引號,截取的字符串的方法例如以下:
${varible##*string} 从左向右截取最后一个string后的字符串
${varible#*string}从左向右截取第一个string后的字符串
${varible%%string*}从右向左截取最后一个string后的字符串
${varible%string*}从右向左截取第一个string后的字符串
将上面的string换成“就可以,然后在推断字符串的长度,假设相等就是没有。假设不相等就是有双引號。不能够
用更改数组分隔符的方法。那样做无效。这个双引號是shell内建的符号。
通用的awk查找方法,比如:
find=`echo {${arr[$i]}|awk 'BEGIN{FS=""}{for(i=1;i<=NF;i++) if($i==";") print $i}'`;
也能够用math和index方法,比如:flag=`echo {$line}|awk '{print match($0,"channel")}'`
数组默认的分隔符是空格,假设想改变默认的分隔符,用以下的方法
str="abd#ddd#ff";str2=($(echo $str|tr ''#''|tr -s ''));
參考自:http://www.cppblog.com/zhangyq/archive/2010/10/08/126537.aspx?opt=admin
shell 中数组学习的更多相关文章
- shell中数组讲解
定义数组 在Shell中,用括号来表示数组,数组元素用"空格"符号分割开.定义数组的一般形式为: 代码如下: 数组名=(值1 值2 ... 值n) 例如: 代码如下: array_ ...
- linux shell 中数组使用方法介绍
linux shell在编程方面比windows 批处理强大太多,不管是在循环.运算.已经数据类型方面都是不能比較的. 以下是个人在使用时候,对它在数组方面一些操作进行的总结. 1.数组定义 [che ...
- linux shell 中数组的定义和for循环遍历的方法
linux 中定义一个数据的语法为: variable=(arg1 arg2 arg3 ....) 中间用空格分开.数组的下标从0开始. 1 获取下标为n的元素: variable[n] 而且不存在数 ...
- Shell中数组的使用
数组是一个很有用的数据结构,经常使用的功能有初始化,遍历,查找,获取数组长度等操作 一.初始化 小括号中使用空格分开的数据结构就是一个数组,也可使用下标添加元素 arr=(1 'nice' '2day ...
- shell中数组基础语法
数组的基本赋值 arr=(a b c) arr[index]=a 2.常用的两个方法 str=${arr[@]}(数组转化成字符串) len=${#arr[*]}(数组长度) 3.遍历数组的方法 #! ...
- Linux Shell 中数组的语法及应用
#!/bin/sh## 数组的声明与初始化方法# 先声明后赋值:declare -a arrayarray=(one two three) # 声明并初始化:array_1=(1 2 3 four) ...
- shell中数组及其相关操作
转载 https://blog.csdn.net/jerry_1126/article/details/52027539
- shell脚本中数组array常用技巧学习实践
shell中数组的下标默认是从0开始的 1.将字符串放在数组中,获取其长度 #!/bin/bashstr="a b --n d"array=($str)length=${#arra ...
- linux shell 中的数组的取值 遍历 替换 删除操作
引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解 ...
随机推荐
- 手机端META详细解释
一.天猫 <title>天猫触屏版</title> <meta content="text/html; charset=utf-8" http-equ ...
- Spring Security Web应用入门环境搭建
在使用Spring Security配置Web应用之前,首先要准备一个基于Maven的Spring框架创建的Web应用(Spring MVC不是必须的),本文的内容都是基于这个前提下的. pom.xm ...
- 廖雪峰Java10加密与安全-5签名算法-2DSA签名算法
DSA DSA:Digital Signature Algorithm,使用EIGamal数字签名算法,和RSA数字签名相比,DSA更快. DSA只能配合SHA使用: SHA1withDSA SHA2 ...
- python 日记 day1
1.python2 与 python3 的区别: a. python2 源码不标准,混乱,重复代码太多.默认方式是ascii码,解决方式:#-*- encoding:utf-8 -*- b. ...
- 编码格式简介(ANSI、GBK、GB2312、UTF-8、UTF-16、GB18030和 UNICODE)
很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物,他们把这称为”字节”.再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态 ...
- 多表关联懒加载导致的org.hibernate.LazyInitializationException: could not initialize proxy - no Session
本来考虑的是懒加载,这样可以提高效率,不过由于时间紧急 把懒加载改为急加载临时解决 https://www.jianshu.com/p/89520964f458 自己管理session也可以 临时补丁 ...
- python简单爬豆瓣电影排名
爬豆瓣电影 网站分析: 1 打开https://movie.douban.com,选择 [排行榜],然后随便选择一类型,我这里选择科幻 2 一直浏览网页,发现没有下一的标签,是下滑再加载的,可 ...
- 利用TensorFlow识别手写的数字---基于两层卷积网络
1 为什么使用卷积神经网络 Softmax回归是一个比较简单的模型,预测的准确率在91%左右,而使用卷积神经网络将预测的准确率提高到99%. 2 卷积网络的流程 3 代码展示 # -*- coding ...
- @EnableAsync使用
EnableAsync注解的意思是可以异步执行,就是开启多线程的意思.可以标注在方法.类上. 1 @Component 2 public class Task { 3 4 @Async 5 publi ...
- MySQL 报错:Translating SQLException with SQL state '42000', error code '1064', message
MySQL报错详细日志 2019-09-12 16:42:29 [http-nio-80-exec-25] DEBUG [org.springframework.jdbc.support.SQLErr ...