shell笔记

第七章 数组
Bash shell只支持一位数组(不支持多维数组),初始化时不需要定义数组大小,数组元素从0下标开始。
1定义数组
指定元素来定义数组:
array[key] = value
array[2] = 13
declare语句定义数组:
declare -a arrayname
通过元素集合来定义数组:
array = (1 2 3 4 5 )
键值对定义数组:
array = ([0]=value0 [1]=value1...[n]=valuen)
读取数组
“${array[index]}” 获得index下标的元素值
“${array[@]}” 所有元素的值
“${array[*]}” 所有元素的值
“${#array[@]}” 数组元素个数
“${#array[*]}” 数组元素个数
(${array[@]:start:length}) 以切片的方式读取数组,从start开始,读取length长度
${array[@]/source/replace} 把array中source替换为replace

数组和普通变量:

2数组赋值

array[key]=value  array[2]=10 这种方式可以扩展(将元素个数增加)

array=(value1 value2 value3 value4..) array=(2 3 4 5 6)

3删除数组

unset array[n]   删除某个元素

unset array     删除整个数组

4其他操作

nwearrar=(“${array[@]}”)             赋值数组

(“${array1[@]}” “${array2[@]}”)        连接数组

加载文件到数组:

content=(`cat test.txt`)

for var in “${content[@]}”

do

...

done

 

第八章 正则表达式

1行首定位符

str=’ls -a| grep “^test”’    ls -a命令结果中以test开头的文件显示出来  

echo “$str”

2行尾定位符

str=`ls -a | grep “.sh$”`    ls -a命令结果中后缀为.sh的文件显示出来

echo “$str”

3精确找到某一文件     把ls -a 命令结果中test开头,.sh结尾的文件显示出来

str=`ls -a | grep “^test.sh$”`

echo “$str”

这种方法也不能唯一找到文件,如下:


运行结果为:



都是以test开头,都是以.sh结尾。

4圆点字符匹配

.”用来匹配字符或空格,“.”表示这个位置上至少有个空格。

str=`ls -a | grep “test”`    

str=`ls -a | grep “test.”` 


对比结果如下:



4限定符“*

str=`ls -a | grep “sss*”`    “*”指定前面一个字符(s)重复的次数(包括0次)

echo “$str”

5字符集匹配

str=`ls -a | grep “^rc[0-9]”`  ls -a结果中以rc开头并且按照rc0rc1rc2....rc9排序显示。

6字符集不匹配

str=`ls -a | gerp “[^test]”`  不匹配其中任意字符

扩展表达式:

1

str=`ls -a | grep “^sss+”`     “^s”s为首的,”ss+”,ss后面的s至少出现一次,即次数>=1

2

str=`ls -a | grep “^sss?”`      “^s”s为首的,”ss+”,ss后面的s至多出现一次,即次数<=1

 

3

str=`ls -a | grep “(sss|ssh|ssd)”` 匹配含有这三个字符的文件

perl正则表达式       

1

str=`ls -a | grep -p “^rc\d”`      “\d”匹配0~9任意数字,结果为rc0rc1...rc9

2

str=`ls -a | grep -p “^rc\D”`      “\D”匹配非数字字符

3

“\s”匹配任何空字符(包括空格、制表符、换页符)

4

“\S”匹配任何非空字符

 

匹配单个字符:

1

str=`grep “a” test.txt`          txt文件中含a的行输出

2

str=`grep “\.” test.txt `         txt文件中含“.”的行输出

匹配多个字符:

1

str=`grep “abcdef” test.txt`     匹配test文件中的字符串

2

str=`grep “o[ru]” test.txt`       or或者ou 的行

3

str=`grep “lo*king” test.txt`     *为模糊查找,*前面o的个数可以为01..

4

str=`grep “800-[[:digit:]]{3}-[[:digit:]]{4}$” test.txt`    test文件中800-xxx-xxxx格式电话显示

grep命令

grep options pattern file

具体的操作有以下选项:


grep模式很灵活,可以是字符串、变量、正则表达式(有空格就用“”双引号括起来)



1指定命令解释器:

Linux系统中有多个shell程序,如sh,bash,csh等,当执行一段shell程序时必须确定用哪个shell解析。

#! /bin/bash

#! /usr/local/phps/bin/php

#! /bin/more

2注释方法:

第一种:                              第二种:

#! 注释1                                   <<BLOCK

#! 注释2                                   ..........

#! 注释3                                   BLOCK

3执行shell程序:

需要创建进程来执行脚本

a.授予执行权限(chomod u+x myshell)                 ./myshell.sh

b.不需要拥有执行权                                  /bin/bash myshell.sh

不创建进程的source

c.执行结果略不同                                    source myshell.sh


4Shell程序退出状态

每个命令都会返回一个状态,成功返回0,失败返回0~255之间的一个整数$?保存了最后一条,命令的退出状态。

第三章:

1变量和引用:

程序设计语言根据类型确定的时间分为:静态类型语言和动态类型语言

静态类型语言,在编译期间就确定变量类型的语言(JavaC++PASCLA),变量使用前,必须先声明。

动态类型语言:在程序执行过程中才能确定变量的数据类型(VBScriptPHPPython)。

根据是否强制要求类型定义分为:强类型语言和弱类型语言

强类型语言:JavaC++

弱类型语言:VBScript

Shell是一种动态类型和弱类型语言。

全局变量:在脚本中定义的都是全局变量,函数中定义的也是全局变量(生命周期从调用函数的时间点开始,直至shell脚本结束或显示被删除)


局部变量:局部变量范围比较小,在函数内部定义的变量,前面加local即可。但是当global变量与local变量同名时,global变量会屏蔽到local 变量。


shell实现简单的三个数排序:



如果输入的不是阿拉伯数字,如+-%>,#等会默认转化为ASCII码值来比较大小。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值