当前位置:网站首页>Shell编程学习(四)read读取、函数、文件归档、定时任务
Shell编程学习(四)read读取、函数、文件归档、定时任务
2022-04-21 21:23:00 【北海冥鱼未眠】
read读取控制台输入的信息
基本语法 read (选项) (参数)
- ①选项:-p:指定读取值时的提示符; -t:指定读取值时等待的时间(秒)如果-t 不加表示一直等待
- ②参数变量:指定读取值的变量名
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# vim read.sh
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# . read.sh
请输入尊姓大名北海冬木
Welcome 北海冬木
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# cat read.sh
read -p "请输入尊姓大名" name
echo "Welcome $name"
函数
系统函数
basename:获取文件名
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# basename /home/dongmu/shellStudy/fun.sh
fun.sh
如果后面还带有参数就会当成后缀然后去掉之后再返回
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# basename /home/dongmu/shellStudy/fun.sh .sh
fun
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# basename /home/dongmu/shellStudy/fun.sh sh
fun.
dirname:获取文件的路径,就是文件名去掉
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# dirname /home/dongmu/shellStudy/fun.sh
/home/dongmu/shellStudy
我这里测试了它不存在目录发现也不会报错,说明这里是根据/来判断的,就是去掉最后一个/以及其后面的内容
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# dirname /home/dongmu/shellStudy/fun.ssh
/home/dongmu/shellStudy
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# dirname /home/dongmu/shellSstudy/fun.ssh
/home/dongmu/shellSstudy
date获取系统时间
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# date
Thu Apr 21 02:27:09 PM CST 2022
自定义函数
- 自定义函数的格式
function 函数名()(这个小括号可上省略)
{
这里面写函数体。
return 值。(可省略)
}
- 函数需要的参数不需要定义,直接使用
$1、$2、$3即可获取。 - 函数的返回值直接使用
$?即可获取 - shell是一个解释语言,一行一行解释执行。
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# . fun.sh
请输入加数12
请输入被加数56
68
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# cat fun.sh
function sum ()
{
s=0
s=$[ $1+$2 ]
echo $s
}
read -p "请输入加数" n1
read -p "请输入被加数" n2
sum $n1 $n2
带有return的函数;
- 要注意
$?只能获取0-255的值,多了就溢出了。 - 如果我们想获取值就先复制给一个变量,然后取变量的值就行了。
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# vim fun.sh
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# . fun.sh
14
请输入加数12
请输入被加数21
33
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# echo $?
0
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# cat fun.sh
function sum ()
{
s=0
s=$[ $1+$2 ]
echo $s
}
function multi
{
e=$[$1*$2]
return $e
}
multi 2 7
echo $?
read -p "请输入加数" n1
read -p "请输入被加数" n2
sum $n1 $n2
文件归档
- 实际生产应用中,往往需要对重要数据进行归档备份。
- 需求:实现一个每天对指定目录归档备份的脚本,输入一个目录名称(末尾不带/), 将目录下所有文件按天归档保存,并将归档日期附加在归档文件名上,放在/root/archive 下。
- 这里用到了归档命令:tar 后面可以加上-c 选项表示归档,加上-z 选项表示同时进行压缩,得到的文件后缀名 为.tar.gz。
下面编写一个脚本对我的一个文件进行归档,输入为文件的全路径
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# cat file.sh
#!/bin/bash
# 首先判断输入参数的个数是否是1,不是1就有问题
if [ $# -ne 1 ]
then echo "参数个数错误"
exit
fi
# 从输入参数中获取当前的目录名称
# 判断是否是一个文件的全路径
if [ -f $1 ]
then echo
else
echo
echo "文件目录不存在"
echo
exit
fi
#把这个文件的名字取出来
DIR_NAME=$(basename $1)
#把这个文件的路径取出来
DIR_PATH=$(cd $(dirname $1); pwd )
# 读取当前日期
DATE=$(date +%y%m%d)
#定义生成的归档文件名称
FILE=archive_${DIR_NAME}_$DATE.tar.gz
#生成的归档文件的路径,也就是归档之后压缩包的存放位置
DEST=/home/crm/crmLogout/$FILE
echo "开始归档"
echo
#进行归档,第一个参数是归档的目的地,第二个参数是需要归档的文件的地址
tar -czf $DEST $1
if [ $? -eq 0 ]
then
echo
echo
echo "归档成功"
echo "归档文件为:$DEST"
echo
else
echo "归档文件出现问题"
echo
fi
exit
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# ./file.sh /home/crm/nohup.out
开始归档
tar: Removing leading `/' from member names
归档成功
归档文件为:/home/crm/crmLogout/archive_nohup.out_220421.tar.gz
[root@iZwz9hv1phm24s3jicy8x1Z crmLogout]# ls
archive_nohup.out_220421.tar.gz
[root@iZwz9hv1phm24s3jicy8x1Z crmLogout]# tar -zxvf archive_nohup.out_220421.tar.gz
home/crm/nohup.out
[root@iZwz9hv1phm24s3jicy8x1Z crmLogout]# ls
archive_nohup.out_220421.tar.gz home
[root@iZwz9hv1phm24s3jicy8x1Z crmLogout]# cd home
[root@iZwz9hv1phm24s3jicy8x1Z home]# ls
crm
[root@iZwz9hv1phm24s3jicy8x1Z home]# cd crm
[root@iZwz9hv1phm24s3jicy8x1Z crm]# ls
nohup.out
定时任务
对于我们项目部署之后会不断地生成文件,如果我们想让我们的linux服务器定时地在每天00点进行文件的归档,然后把原来的文件清空,就可以编写一个shell脚本,然后添加到定时任务中即可。
- 编写shell脚本
这个脚本是把输出Hello World!放到test.txt文件中
echo "Hello World!">> /home/dongmu/shellStudy/test.txt
- 编写定时任务执行脚本
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# crontab -e
* * * * * /home/dongmu/shellStudy/time.sh
#上面这个定时任务的意思是每分钟执行一次time.sh这个脚本。
#查看系统的定时任务
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# crontab -l
* * * * * /home/dongmu/shellStudy/time.sh
- 下面验证是否成功
[root@iZwz9hv1phm24s3jicy8x1Z shellStudy]# cat test.txt
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
可以发现每分钟都在添加文件,说明我们的脚本和定时任务都执行成功了。
编写脚本定时拷贝文件到另一个目录,然后把原来文件内容清除,防止单个文件过大
(当然这里只是提供一个思路,具体实现么没有这么简单,考虑是cp还是mv等)
DATE=$(date +%y%m%d)
cp /home/crm/nohup.out /home/crm/crmLogout/nohup_${DATE}.out
rm -f /home/crm/nohup.out
touch /home/crm/nohup.out
然后把这个脚本放在定时任务里面即可。
版权声明
本文为[北海冥鱼未眠]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_45401910/article/details/124320134
边栏推荐
- Back to basics, multi-party security computing should return to the original consideration of "security"
- Bailian4005 puzzle [greed]
- Manuel d'utilisation et de développement de la plate - forme de connexion unique pour l'amarrage du système d'AP de Tongda
- 通达oa工作流升级 操作说明
- Sword finger offer 15 Number of 1 in binary
- Bailian4105 save the princess [BFS]
- Smart face recognition 4 -- pytoch uses retinaface + facenet to build a face recognition platform
- 解决国内手机无法注册Google gmail账户问题
- 基于OpenStack的云计算平台搭建
- 聪明的人脸识别2——Keras 利用Retinaface+Facenet搭建人脸识别平台
猜你喜欢

Principal component analysis R language implementation

Neural network learning small record 56 -- the principle and function of batch normalization layer

Swift uses avplayer and avplayeritem for voice playback

飞行安全背后,不可或缺的物联网无线通信传感器设备

聪明的人脸识别3——Pytorch 搭建自己的Facenet人脸识别平台

Cross compile C program for rk3568 development board

Others - understand CGI, fastcgi, WSGI, uwsgi and uwsgi

聪明的人脸识别2——Keras 利用Retinaface+Facenet搭建人脸识别平台

其它——MyCat实现分库分表

睿智的目标检测50——Tensorflow2 利用mobilenet系列(v1,v2,v3)搭建yolov4目标检测平台
随机推荐
Bailian4006 little rabbit picks up gold coins [simulation]
Back to basics, multi-party security computing should return to the original consideration of "security"
憨批的语义分割重制版6——Pytorch 搭建自己的Unet语义分割平台
聪明的人脸识别1——Keras 搭建自己的Facenet人脸识别平台
反射111
Use fluent to animate a color filter for photos
Application case of Lora wireless data transmission module of Internet of things: lorawan gateway communication technology
L1-005 考试座位号
神经网络学习小记录57——各类激活函数Activation Functions介绍与优缺点分析
Others - understand CGI, fastcgi, WSGI, uwsgi and uwsgi
公文管理系统案例展示
尿素期货怎么做才安全?尿素期货套期保值会有什么好处?
Manuel d'utilisation et de développement de la plate - forme de connexion unique pour l'amarrage du système d'AP de Tongda
Others - the ultimate design scheme of sub database and sub table
Construction of cloud computing platform based on openstack
通达OA与第三方APP对接
聪明的人脸识别3——Pytorch 搭建自己的Facenet人脸识别平台
奇安信冬奥“零事故”终端安全分享会:成功解决6641次攻击事件
太原理工大学程序设计竞赛团队2022年特大丰收
Reflex WMS system has several similarities with SAP system