目录

1、函数

1.1 系统函数

1.2 自定义函数

2、Shell工具(一)

2.1 Cut

2.2 Sed


1、函数

1.1 系统函数

(1)basename基本语法

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

选项:

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

用法:

截取该/home/test/banzhang.txt路径的文件名称

[root@localhost test]# basename /home/test/banzhang.txt
banzhang.txt
[root@localhost test]# basename /home/test/banzhang.txt .txt
banzhang

(2)dirname基本语法

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

练习:

获取banzhnag.txt文件的目录

[root@localhost test]# dirname /home/test/banzhang.txt
/home/test

1.2 自定义函数

基本语法

[ function ] funname[()]         //中括号内容为可选项,可不写
{
	Action;
	[return int;]                //这里的返回值,一般通过$?来获得
}
funname

注意:

  1. 必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。
  2. 函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)

练习:计算两个输入参数之和

[root@localhost test]# vim sum.sh
#!/bin/bash
function sum()
{
        s=0
        s=$[$1 + $2]
        echo $s
}                                             //到这里只是定义了sum函数
read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;                                  //这里引用sum函数
[root@localhost test]# bash sum.sh 
Please input the number1: 1
Please input the number2: 2
3

2、Shell工具(一)

2.1 Cut

Cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。Cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。

cut [选项参数]  filename                          //说明:默认分隔符是制表符

选项参数

功能

-f

列号,提取第几列

-d

分隔符,按照指定分隔符分割列

练习:

[root@localhost test]# vim cut.txt                   //加入文本
dong shen
guan zhen
wo  wo
lai  lai
le  le
[root@localhost test]# cut -d " " -f 1 cut.txt       //切割cut.txt第一列
dong
guan
wo
lai
le
[root@localhost test]# cut -d " " -f 2,3 cut.txt     //切割cut.txt第二、三列
shen
zhen
 wo
 lai
 le
[root@localhost test]# cat cut.txt | grep guan | cut -d " " -f 1   //切割cut.txt文件中的guan
guan
选取系统PATH变量值,第2个“:”开始后的所有路径:
[root@localhost test]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost test]# echo $PATH | cut -d : -f 3-
/usr/sbin:/usr/bin:/root/bin
[root@localhost test]# 
切割ifconfig 后打印的IP地址:
   这里我们考虑到可能不止一块网卡有地址这个选项,所以我们首先得显示我们要切割的网卡。
[root@localhost test]# ifconfig ens160
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.67.133  netmask 255.255.255.0  broadcast 192.168.67.255
        ether 00:0c:29:8b:4b:9c  txqueuelen 1000  (Ethernet)
        RX packets 17007  bytes 18860791 (17.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9496  bytes 638891 (623.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@localhost test]# ifconfig ens160 | grep inet
        inet 192.168.67.133  netmask 255.255.255.0  broadcast 192.168.67.255
[root@localhost test]# ifconfig ens160 | grep inet | cut -d" " -f2
  这里的基本思路就是先利用显示命令和grep等,先将关键行过滤出来,再对关键行进行分割。

2.2 Sed

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

sed [选项参数]  'command'  filename

选项参数

功能

-e

直接在指令列模式上进行sed的动作编辑。

命令

功能描述

a 

新增,a的后面可以接字串,在下一行出现

d

删除

s

查找并替换

注:这里的参数仅仅为常用参数,并非所有参数。

[root@localhost ~]# vim sed.txt              //导入原始数据
dong shen
guan zhen
wo  wo
lai  lai

le  le
[root@localhost ~]# sed '2a mei nv' sed.txt  //将“mei nv”这个单词插入到sed.txt第二行下,打印。 
dong shen
guan zhen
mei nv
wo  wo
lai  lai

le  le
[root@localhost ~]# sed 'a2 mei nv' sed.txt  //这个是Sed参数a2的显示,和2a还是有区别的
dong shen
2 mei nv
guan zhen
2 mei nv
wo  wo
2 mei nv
lai  lai
2 mei nv

2 mei nv
le  le
2 mei nv
注:使用Sed显示之后源文件是不会变化的。
[root@localhost ~]# sed '/wo/d' sed.txt     //删除sed.txt文件所有包含wo的行 
dong shen
guan zhen
lai  lai

le  le
[root@localhost ~]# sed 's/wo/ni/g' sed.txt  //将sed.txt文件中wo替换为ni,‘g’表示global,全部替换
dong shen
guan zhen
ni  ni
lai  lai

le  le
[root@localhost ~]# sed -e '2d' -e 's/wo/ni/g' sed.txt    //将sed.txt文件中的第二行删除并将wo替换为ni;当需要多次操作时,使用-e选项。
dong shen
ni  ni
lai  lai

le  le

 

 posted on 2020-12-28 17:28  嚴∞帅  阅读(43)  评论(0编辑  收藏  举报