Shell编程——函数的使用

Shell编程——函数的使用

Shell 函数的本质是一段可以重复使用的脚本代码,这段代码是事先写好的,放置在特定的地方,当需要的时候可以随时调用。

1、系统函数

basename

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

语法格式:

basename [pathname/string] [suffix]

suffix作为后缀,在指定 suffix时, basename将删除 pathname或 string中的 suffix。

使用实例:返回 /home/test1.sh 的 “test1.sh” 部分

[root@haoming home]# basename /home/test1.sh 
test1.sh

指定去除的后缀:返回 /home/test1.sh 的 “test1” 部分

[root@haoming home]# basename /home/test1.sh .sh
test1

dirname

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

语法格式:

dirname 文件绝对路径

使用实例:返回 /home/test1.sh 的 /home

[root@haoming home]# dirname /home/test1.sh 
/home

编写shell文件测试:

#!/bin/bash
#获取文件名
echo filename = $(basename $0)
#获取文件路径
echo filepath = $(dirname /home/test1.sh )

执行shell文件:

[root@haoming home]# ./test1.sh
filename = test1.sh
filepath = /home

2、自定义函数

定义函数的格式:

[function] funname() {
    
    
    Action
    [return int]
}

对各个部分的说明:

  • function: Shell 中的关键字,专门用来定义函数,可以使用,也可以不使用。如果使用了function,那么函数名的小括号()就可以省略;
  • funname:表示函数名称;
  • Action:是函数要执行的一组语句;
  • return int:表示函数的返回值,return后面跟数值,范围是0-255,如果不加返回值,函数将以最后一条语句的执行结果作为返回。使用$?可以得到函数的退出状态。

注意事项:

  • 在调用函数之前必须先声明函数,因为shell脚本是逐步运行的;

  • { }包围的部分称为函数体,调用一个函数,实际上就是执行函数体中的代码。

  • Shell 函数在定义时不能指明参数,但是在调用时却可以传递参数,并且给它传递什么参数它就接收什么参数。

使用实例

定义一个函数,实现控制台读取两个数字并相加:

编写shell脚本文件:

#!/bin/bash
#定义函数
function add(){
    
    
  s=$[$1+$2]
  echo $s
}
read -p "请输入第一个数字:" a
read -p "请输入第二个数字:" b
#调用函数,并传递参数 $a $b
sum=$(add $a $b)
echo "sum=$sum"

执行shell文件:

[root@haoming home]# ./test1.sh 
请输入第一个数字:90
请输入第二个数字:900
sum=990

3、文件自动归档实现

需求:编写一个每天对指定目录进行归档备份的脚本,输入一个目录名称(末尾不带/),将目录下所有文件每天进行归档保存,并将归档日期附加在归档文件名上,放在/home/archive 下。

shell文件:

#!/bin/bash

# $#获取传递的参数个数,只允许传一个文件目录进行备份
if [ $# -ne 1 ]
then
    echo "错误信息:备份文件数不为1"
    exit
fi
#判断是否是目录
if [ -d $1 ]
then   
    echo
else
    echo "目录不存在"
    exit
fi

#获取备份文件名称和路径
DIR_NAME=$(basename $1)
DIR_PATH=$(cd $(dirname $1); pwd)

#获取当前日期,年月日
DATE=$(date +%y%m%d)

#定义生成的备份文件和路
FILE=archive_${DIR_NAME}_$DATE.tat.gz
DEST=/root/archive/$FILE

#执行归档操作 c:归档操作,z:压缩,f:指定备份文件

echo
echo "开始归档操作:"

tar -czf $DEST $DIR_PATH/$DIR_NAME

#判断归是否成功
if [ $? -eq 0 ]
then
    echo "归档成功"
    echo "归档文件为:$DEST"
else 
    echo "归档失败"
    echo
fi
exit

执行shell文件,对/usr目录下的myblog文件进行备份:

[root@haoming home]# ./daliy_archive.sh /usr/myblog

开始归档操作:
tar: Removing leading `/' from member names
归档成功
归档文件为:/root/archive/archive_myblog_220615.tat.gz

将文件备份脚本添加到定时任务中执行

查看当前用户定时任务:

[root@haoming home]# crontab -l
no crontab for root  #没有任务

添加定时任务

命令:crontab -e

0 5 * * *  /home/daliy_archive.sh /usr/myblog

解释:每天五点整执行脚本文件

猜你喜欢

转载自blog.csdn.net/wpc2018/article/details/125301049