Linux--shell数组和字符串--09
2024-09-02 00:32:48
一、数组
数组就是一段连续的变量,一段连续的内存存储空间,为了解决变量过多的问题,在同一类变量中,我们不需要去定义多个名字,而是以数组的方式来定义
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 指定所属组
最新文章
- putty无密码登陆
- 腾讯QQ你的缓存策略应该改下了
- VMware/Microsoft官网查询参加的培训及认证信息
- [deviceone开发]-do_SlideListView的简单示例
- 【HDU2196 Computer】经典树形dp
- 负载均衡SESSION同步总结
- MySQL Optimizer Tracemy 与 logmnr:MySQL binlog logmnr----MYSQL 邱伟胜 专家博客
- asp.net 在线人数统计\页面访问量
- 「Poetize9」升降梯口
- uva 580 危险的组合(排列组合)
- hdu 3642 Get The Treasury (三维的扫描线)
- PHP 函数dirname()使用实例
- bootstrap switch功能
- 编译GDAL支持MySQL
- Android 关于解决MediaButton学习到的media控制流程
- Javascript高级编程学习笔记(58)—— 事件(2)事件处理程序
- 使用 OpenSSL 创建私有 CA:1 根证书
- LeetCode(69):x 的平方根
- centos 安装 python36
- mac上校验文件的 md5 sha-1