shell编程(2)

shell函数的使用


C语言中函数

int add()

{

。。。。函数内容

}


shell函数

add()圆括号里面不需要写形参,也没有返回值

{

函数

$1

$2

}


echo $1
echo $2
name="zhangsan"
name1="lisi"
pri $1 $2           函数调用    函数名 实参


打印的结果 :

shell中的函数如果你要传递参数,那么函数体中是通过$n表示第n个参数

============================================

计算字符串的个数

echo "$"


 shell编程中关于字符串的处理
       shell脚本有很多代码都是关于处理字符串的操作
       小结:目前知道的处理方法,贪婪(非贪婪)

注意:两个%%表示贪婪匹配,具体含义是:使用通配符[a-zA-Z]*从右向左“尽可能多地”

匹配字符(贪婪原则)。如果只写一个%,则无贪婪原则,那么[a-zA-Z]*将按照最少原则
匹配,即匹配
0 个字符(因为方括号星号*的含义是0 个或多个字符)。这个道理对于删除
左边字符的井号
#也是适用的:双井号##代表从左到右的贪婪匹配

===============================================================

正则表达式






awk使用

测试文档:(grade.txt)
M.Tansley 05/2013 48311 Green 8 90
J.Lulu 04/2012 48317 green 12 88
P.bunny 02/2013 48 Yellow 9 70
J.Troll 09/2013 4842 Brown-3 11 95
L.Tansley 05/2013 4712 Brown-2 10 85
Vincent 07/2012 4712 Brown 13 87

1,打印指定列(例如名字和年龄)
awk  '{print $1,$5}'  grade.txt
注意:其中单引号中的被大括号括着的就是awk的语句,只能被单引号包含。
其中的$1..$n表示第几例。$0表示整个行。


注意:awk的工作次序是:首先读取grade.txt文件一个记录(即一行),然后根据单引号内部的指令工作,完了之后继续读下一行,以此类推。每读一行都会将单引号里面的语句从头到尾地应用到那一行中去。


2,格式化输出(和C语言一样一样的)
awk  '{printf"%-10s:%-d\n", $1,$5}'  grade.txt

3,过滤
awk  '$5==11 && $6>=90 {print $0}'  grade.txt
意思是==>打印出年龄等于11岁且分数大于90分的孩子的信息


4,打印表头,引入内建变量NR
awk  'NR==1 || $6>=90 {print}'  grade.txt
注意:NR是一个所谓的内建变量,表示已经读出的记录数(即行号)


其它有用的内建变量是:
$0 当前记录(这个变量中存放着整个行的内容)
$1~$n 当前记录的第n个字段,字段间由FS分隔
FS 输入字段分隔符 默认是空格或Tab
NF 当前记录中的字段个数,就是有多少列
NR 行号,从1开始,如果有多个文件这个值将不断累加。
FNR 当前记录数,与NR不同的是,这个值会是各个文件自己的行号
RS 输入的记录分隔符, 默认为换行符
OFS 输出字段分隔符, 默认也是空格
ORS 输出的记录分隔符,默认为换行符
FILENAME 当前输入文件的名字


5,指定分隔符
awk  ‘BEGIN{FS=”:”} {print $1}’  /etc/passwd
注意:BEGIN意味着紧跟在它后面的语句{FS=”:”}会在awk读取第一行之前处理。

上面的语句等价于
awk  -F:  ‘{print $1}’  /etc/passwd
如果有多个分隔符,则可以写成
awk  -F’[\t;:]’  ‘{print $1}’  /etc/passwd


6,使用正则表达式匹配字符串
awk  '$0~/Brown.*/ {print}'  grade.txt  意思是==>将所有包含Brown的行打印出来
注意:波浪号~后面紧跟着一对正斜杠,表示所指定的域(这里是$0)要匹配的规则

7,使用模式取反的例子
awk  '$0!~/Brown.*/ {print}'  grade.txt  意思是==>将所有不包含Brown的行打印出来

8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值