Linux--shell数组和字符串--09
一、数组
数组就是一段连续的变量,一段连续的内存存储空间,为了解决变量过多的问题,在同一类变量中,我们不需要去定义多个名字,而是以数组的方式来定义
1、定义数组
declare -a 定义数组
declare -A 定义嵌套的数组 --- 这个在bash中并不常用
testname=(value) 也可以定义一个空数组
2、数组赋值
shell中是可以跳跃赋值的
testname=( )
a) testname[0]=1 ----索引一般从0开始,但索引并不一定是数字;
b) testname=(/var/log/*.log) 把/var/log下以.log结尾的放入数组
c) testname=(“qq=123” “vx=456”…)
d) 通过read命令赋值:read -a 输入数组所需的变量值
read -a x y z …
3、调用数组
${变量名}
${数组名[索引]} 定义的是哪个索引,就看到是对应索引指定的值
${数组名} 默认调用索引=0的值
${数组名[*]} 或者 ${数组名[@]} 调用数组内所有的值
4、练习:统计/var/log/*.log匹配到的所有文件索引为偶数文件的行数的和。
a=(/var/log/*.log)
declare -i sum=0
for i in `seq 0 7`;do
if [ $[$i%2] -eq 0];then
line=wc -l ${a[$i]} |cut -d’ ‘ -f1
sum += $line
fi
done
echo $sum
5、调用数组的长度
${#变量名[*]} 或者 ${#变量名[@]}
6、添加数组值的特殊方式
${变量名[${#变量名[@]}]}=”值” 或 ${变量名[${#变量名[*]}]}=”值”
7、数组切片
${变量名[@]:偏移量:取值个数} ${a[*]::} 不加取值个数就是取到最后
8、删除值
unset ${变量名[索引]} 删除的是该索引数的值,其他值索引不变
9、修改值
覆盖就是修改
二、字符串
1、格式化输出:printf
printf "%-5s %-5s %-5s" No Name Height
printf "%-5s %-5s %-5d" zhangsan
printf "%-5s %-5s %-5.1f" zhangsan 170.5
%-5d 左对齐
2、字符串切片
${变量名:偏移量:数值个数} a=abcdefg ${a::} ===cdef
${变量名: -数值个数} 从后往前取 冒号后面一定要有空格
${变量名:-word} 默认赋值,如果变量没有赋值,就使用默认值
3、基于模式取子字符串
${变量名#patten} a=abcdABCabABCD ${a#a*C}===adABCD 从开头匹配删除最短匹配的子串
${变量名##pattern} a=abcdABCabABCD ${a##a*C}===D 从开头匹配删除最长匹配的子串
${变量名%pattern} a=abcdABCabABC ${a%a*C}===abcdABC 从结尾匹配删除最短匹配的子串
${变量名%%pattern} a=abcdABCabABC ${a%a*C}===空 从结尾匹配删除最长匹配的子串
4、字符替换
${变量名/pattern/替换的字符串} 匹配第一个pattern进行替换
a=192.168.1.1 ${a//}=72.168.1.1
${变量名//pattern/替换的字符串} 匹配所有pattern进行替换
${变量名/#pattern/替换的字符串} pattern必须出现在行首,不然不替换
${变量名/%pattern/替换的字符串} pattern必须出现在结尾,不然不替换
注意:/分隔符不能换成(# % 等特殊字符)
5、查找并删除:替换中不指定替换的字符串,即为删除
${变量名/pattern}
${变量名//pattern}
${变量名/#pattern}
${变量名/%pattern}
6、替换大小写
tr [:lower:] [:upper:] < filename 小写转大写
${变量名^^} 把小写转换为小写
${变量名,,} 把大写转换为小写
7、变量赋值
变量名1=${变量名2:-word} 当变量2没有值时,赋予变量1默认word值
变量名1=${变量名2:+word} 当变量2有值时,赋予变量1默认word值
${变量名:=word} 变量没有值的时用word默认值,有值则用原来的值
变量名1=${变量名2:?error_info} 变量2没有值时,输出error_info
8、脚本应用其他文件中的变量
vim /root/filename1
a=
b=
:wq vim /root/filename2.sh
./root/filename1 #导入filename1文件
c=$[$a+$b]
echo $c
:wq
9、两个命令
mktemp:创建临时文件以及目录,避免取的文件名重复
格式:mktemp 名字.XXXX XX代表随机数(字母和数字)
默认创建的是文件
-d 创建名字随机的目录
例如:file=`mktemp a.XXX` dir=`mktemp -d b.XXX`
install:复制或删除文件,用法和copy相同
优点是可以指定权限来复制文件
用法:
install [option] 文件 目录 复制时恢复初始权限
install [option] 目录 文件
参数:
-t 源目对换
-d 创建
-m MODE 设置权限 mask
-o OWNER 指定所属主
-g GROUP 指定所属组
Linux--shell数组和字符串--09的更多相关文章
- Linux Shell数组常用操作详解
Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...
- 转:linux shell 数组建立及使用技巧
linux shell在编程方面比windows 批处理强大太多,无论是在循环.运算.已经数据类型方面都是不能比较的. 下面是个人在使用时候,对它在数组方面一些操作进行的总结. 1.数组定义 [che ...
- 转载-Linux Shell 数组建立及使用技巧
转载自:http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html 如侵犯版权,请联系我删除 linux shell在编程方面比win ...
- linux shell 数组建立及使用技巧
参考网址:http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html linux shell在编程方面比windows 批处理强大太多 ...
- Linux Shell 数组
shell 数组一般都是一维数组. 1. 数组的声明 declare -a arr 该命令将声明一个数组arr,实际上不声明也可以直接定义数组. 2. 数组的初始化 arr=(1 2 3):该命令定义 ...
- linux shell 数组的使用
引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解 ...
- linux shell数组
from: http://www.jb51.net/article/34322.htm bash shell只支持一维数组,但参数个数没有限制. 声明一个数组:declare -a array(其实不 ...
- linux shell数组赋值方法(常用)
http://blog.csdn.net/shaobingj126/article/details/7395161 Bash中,数组变量的赋值有两种方法: (1) name = (value1 ... ...
- linux shell学习(字符串操作)--01
http://blog.csdn.net/shuanghujushi/article/details/51298672 在bash shell的使用过程中,经常会遇到一些字符串string的操作,下面 ...
随机推荐
- SSRS报表-级联筛选参数刷新后不能默认全选 -问题解决方案
好久没有写博客了,最近更新完善修复了SSRS报表的一些问题,和大家分享. 问题描述: 报表中,区域->专区->省份->地级市 此四个筛选参数是联动的,在DataSet中前一父级参数作 ...
- VS2010中GetMenu()和GetSubMenu(0)为NULL引发异常的解决方法 及添加方法
对于前面问题的分析:来源于http://blog.163.com/yuyang_tech/blog/static/216050083201211144120401/ 解决方法1: //来源:http: ...
- pdo类的使用
使用方法 2.php <?php require_once "./mypdo.php"; $pdo = DAOPDO::getInstance('localhost', 'r ...
- Linux下移动图像监测系统——motion的移植及应用
移动图像监控主系统的开发 移动图像监控的原理方法: 通过获取摄像头图像,比较前后每一帧的图像数据,从而实现移动物体监控.所有移动监控均是如此,只是图像帧的比较算法不同. 移动图像监控系统的实现 选择开 ...
- 个人永久性免费-Excel催化剂功能第105波-批量调整不规范的图形对象到单一单元格内存储
在日常制表过程中,一个不得不面对的问题,许多的工作起点是基于其他人加工过的表格,无论自己多大的本领,面对不规范的其他人的制作的表格,经过自己的手,该擦的屁股还是要自己去亲手去擦,而带出来的也只会是一堆 ...
- Java EE.JSP.概述
JSP最终会被转换成标准Servlet,该转换过程一般出现在第一次请求页面时. JSP页面的主要组成部分如下: HTML 脚本:嵌入Java代码 指令:从整体上控制Servlet的结构 动作:引入现有 ...
- Java网络和代理
Java网络和代理 1)简介 在当今的网络环境中,特别是企业网络环境中,应用程序开发人员必须像系统管理员一样频繁地处理代理.在某些情况下,应用程序应该使用系统默认设置,在其他情况下,我们希望能够非常严 ...
- JavaWeb学习笔记—监听器
监听器Listener是JavaWeb中的三大组件之一 按监听的对象划分,可以分为 ServletContext对象监听器 HttpSession对象监听器 ServletRequest对象监听器 按 ...
- git删除分支步骤
在本地删除一个分支: git branch -D <本地分支> 在github远程端删除一个分支: git push origin :<远程端分支> 唯一不同的就是冒号代表了删 ...
- Qtech 暑假未讲到的算法(不完全)
一.数据结构: 优先队列.堆.RMQ问题(区间最值问题,可以用线段树解决,还有一个Sparse-Table算法).排序二叉树.划分树.归并树..... 字符串处理: KMP.字典树.后 ...