Shell—编程2

CUT

cut 工作就是剪,具体就是在文件中负责剪切数据用的。cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
cut [选项参数] filename
 -f 列号,提取第几列
 -d 分隔符,按照指定分隔符分割列
cut -d " " -f 2,3 cut.txt  //切割第二列和第三列

cat .cut.txt | grep guan |cut -d " " -f 1 //过滤之后再进行切割
选取系统PATH变量值,第2个“:”开始后的所有路径
echo $PATH | cut -d : -f 3-
获取ifconfig eth0 的ip地址
[lyp@hadoop101 datas]$ ifconfig eth0 | grep "inet addr"
          inet addr:192.168.1.101  Bcast:192.168.1.255  Mask:255.255.255.0
[lyp@hadoop101 datas]$ ifconfig eth0 | grep "inet addr" | cut -d : -f 1 
          inet addr
[lyp@hadoop101 datas]$ ifconfig eth0 | grep "inet addr" | cut -d : -f 2
192.168.1.101  Bcast
[lyp@hadoop101 datas]$ ifconfig eth0 | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1
192.168.1.101

 

 

 SED

基本介绍:

sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,
称为"模式空间",接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
接着处理下一行,这样不断重复,直到文件末尾,文件内容并没有改变,除非你使用重定向存储输出。

sed
a 新增,a的后面可以接子串,在下一行出现
d 删除
s 查找并替换
g  是全局
-e  是多个命令 同时执行

将“mei nv ”这个词插入到sed.txt第二行下打印
[lyp@hadoop101 datas]$ sed "4 a 美 女" cut.txt 
默认切割的是空格是一个 需要指定两个
cut -t " " -p 2 2 cut.txt
shen dong
zhen guan
美 女
wo  wo
lai  lai
le  le  

[lyp@hadoop101 datas]$ sed "/wo/d" cut.txt 
默认切割的是空格是一个 需要指定两个
cut -t " " -p 2 2 cut.txt
shen dong
zhen guan
lai  lai
le  le   

//将sed.txt文件的第二行删除并将wo替换为ni
sed -e "2d" -d "s/wo/ni/g"
[lyp@hadoop101 datas]$ sed -e "2d" -e "s/wo/ni/g" cut.txt 
默认切割的是空格是一个 需要指定两个
shen dong
zhen guan
ni  ni
lai  lai
le  le  

 

awk

基本介绍:
awk  一个文本分析工具,把文本逐行的读入,
以空格为默认分隔符将每行切片,切开的部分在进行分析处理
——F 指定输入文件分隔符
-v     赋值一个用户定义变量

FILENAME 文件名
NR    已读的记录数    ----行号
NF    浏览记录的域的个数(切割后,列的个数) ------------列号


1)搜索passwd 文件以root关键字开头的所有行,并输出改行的第7列。
[lyp@hadoop101 datas]$ awk -F : '/^root/{print$7}' passwd  //输出第7列的前提条件是/^root开头的
/bin/bash
2)搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以","分割
[lyp@hadoop101 datas]$ awk -F : '/^root/{print$1","$7}' passwd 
root,/bin/bash
3)只显示/etc/passwd/的第1列和第7列,以逗号分割,且在所有行前面添加列名user,
shell 在最后一行添加"dahaige, /bin/zuihi"
[lyp@hadoop101 datas]$ awk -F : 'BEGIN{print "user,shell"} {print$1","$7} END{print "dahaige, bin/zuihi"}' passwd 
user,shell
root:x:0:0:root:/root:/bin/bash,
bin:x:1:1:bin:/bin:/sbin/nologin,
daemon:x:2:2:daemon:/sbin:/sbin/nologin,
adm:x:3:4:adm:/var/adm:/sbin/nologin,
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin,
sync:x:5:0:sync:/sbin:/bin/sync,
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown,
halt:x:7:0:halt:/sbin:/sbin/halt,
mpty/sshd:/sbin/nologin,
tcpdump:x:72:72::/:/sbin/nologin,
lyp:x:500:500::/home/lyp:/bin/bash,
dahaige, bin/zuihi
4)将passwd文件中的用户id增加数值1并输出
[lyp@hadoop101 datas]$ awk -F : -v i=1 '{print $3+i}' passwd 
1
2
3
4
5
5)
[lyp@hadoop101 datas]$ awk -F : '{print FILENAME"-"NR"-"NF}' passwd 
passwd-1-7   //读取文件passwd 第1行,切完是一共7列
passwd-2-7
passwd-3-7
passwd-4-7
passwd-5-7
passwd-6-7
passwd-7-7
6)读取ifconfig 的IP地址
[lyp@hadoop101 datas]$ ifconfig eth0 | grep "inet addr" | awk -F : '{print $2}'| awk -F " " '{print $1}'
192.168.1.101

7)查询sed.txt中空行所在的行号
[lyp@hadoop101 datas]$ awk '/^$/{print NR}' cut.txt 
7
8


sort 命令
sort (选项)(参数)

-n 依照数值的大小排序  1、2、3、
-r 以相反的顺从来排序  倒序
-t 设置排序时所用的分隔符 
-k 指定需要排序的列

要求以第二列的数值进行排序
bb:40:5.4
bd:20:4.2
xz:50:2.3
cls:10:3.5
ss:30:1.6
[lyp@hadoop101 datas]$ sort -t : -nk 2 sortdemo.sh 
cls:10:3.5
bd:20:4.2
ss:30:1.6
bb:40:5.4
xz:50:2.3

[lyp@hadoop101 datas]$ cat scort.txt |awk -F " " 'sum+=$2' scort.txt 
张三  40
李四 50 
王武 60 

[lyp@hadoop101 datas]$ cat scort.txt |awk -F " " '{sum+=$2} END {print sum}'  scort.txt 
150

shell 脚本里如何检查一个文件是否存在
#!bin/bash
if [ -f file.txt ];then
    echo "文件存在"
else
        echo "文件不存在"
fi

shell脚本对文本中无序的一列数字排序 并累加求和
case num.txt
1
4
2
6
3
7
10
0
5
9

sort -n num.txt | awk '{a+=$0;print$0} END{print "sum="a}'

shell 脚本下写出查找当前文件夹(/home)下所有的文本文件内容包含有字符"shen"的文件名称

[lyp@hadoop101 datas]$ grep -r shen /home
/home/lyp/datas/cut.txt:shen dong
[lyp@hadoop101 datas]$ grep -r shen /home | cut -d ":" -f 1
/home/lyp/datas/cut.txt

 

 

2.函数 

2.1函数介绍

shell编程和其他编程语言一样,有系统函数,也可以自定义函数

2.2. 系统函数

basename 基本语法

功能:返回完整路径最后/的部分 ,常用于获取文件的名

basename [pathname] [suffix]

basename [string][suffix] 功能描述:basename命令会删掉所有的前缀包括最后一个('/')字符,然后将字符串显示出来

suffix为后缀,如果suffix被制定了,basename会将pathname或string中的suffix去掉

dirname 基本语法

功能:返回完整路径最后 /的前面部分,常用于返回路径部分

dirname 文件绝对路径(功能描述:从给定的包含绝对路径的文件中去除文件名(非目录部分),然后返回剩下的路径)

例1

2.3 自定义函数

基本语法

[function]  funname[()]

{

    Action;

    [return int];

}

调用直接写函数名:funname [值]

例1 

#!/bin/bash
#案例1、计算两个参数的和(read) .getSum
function getSum(){
        SUM=$[$n1+$n2]
        echo "和是:$SUM"
}
read -p "请输入第一个参数值:" n1
read -p "请输入第二个参数值:" n2


#调用getSum
getSum $n1 $n2
               

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值