一、数组

数组就是一段连续的变量,一段连续的内存存储空间,为了解决变量过多的问题,在同一类变量中,我们不需要去定义多个名字,而是以数组的方式来定义

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 指定所属组

最新文章

  1. putty无密码登陆
  2. 腾讯QQ你的缓存策略应该改下了
  3. VMware/Microsoft官网查询参加的培训及认证信息
  4. [deviceone开发]-do_SlideListView的简单示例
  5. 【HDU2196 Computer】经典树形dp
  6. 负载均衡SESSION同步总结
  7. MySQL Optimizer Tracemy 与 logmnr:MySQL binlog logmnr----MYSQL 邱伟胜 专家博客
  8. asp.net 在线人数统计\页面访问量
  9. 「Poetize9」升降梯口
  10. uva 580 危险的组合(排列组合)
  11. hdu 3642 Get The Treasury (三维的扫描线)
  12. PHP 函数dirname()使用实例
  13. bootstrap switch功能
  14. 编译GDAL支持MySQL
  15. Android 关于解决MediaButton学习到的media控制流程
  16. Javascript高级编程学习笔记(58)—— 事件(2)事件处理程序
  17. 使用 OpenSSL 创建私有 CA:1 根证书
  18. LeetCode(69):x 的平方根
  19. centos 安装 python36
  20. mac上校验文件的 md5 sha-1

热门文章

  1. samrt210开发板ping-系列问题(开发板ping通主机,主机ping通虚拟机,唯独~开发板ping不通虚拟机)
  2. SpringMVC面试题:什么是Servlet?
  3. 编写Django项目并使用uwsgi和nginx部署在Linux平台
  4. java练习---13
  5. java练习---9
  6. Lombok 使用介绍(常见注解)
  7. jplayer
  8. ubuntu中设置python默认版本
  9. 作为前端的你,CC游戏开发可以上车
  10. Elasticsearch索引增量统计及定时邮件实现