Linux - shell脚本练习
目录
1.备份文件
要求:
编写一个脚本 backup_log.sh 实现备份/var/log 目录下所有文件到/backup目录下,要求文件名是包含当天日期,精确到秒,文件名例如:2020-3-10-17_30_20-log.tar.gz,backup目录下七天前的备份文件,只保留最近七天的,
需求分析
名字:backup_log.sh
备份:tar -->.tar.gz --czf
文件里面有时间:date 使用变量
删除 /backup目录下七天前的文件:
find /backup -mtime +7
[root@localhost lianxi]# cat backup_log.sh
#! /bin/bash
nowtime=$(date +%F-%H_%M_%S)
mkdir /backup -p
tar czvf /backup/${nowtime}-log.tar.gz /var/log
find /backup -mtime +7 -exec rm -rf {} \;
##########################################
2.新建10个文件夹和10个文件
要求:
方法1
用for循环建好文件夹和文件以后将文件夹和文件mv到/feng123里面
[root@localhost lianxi]# cat dir10_file10.sh
#! bin/bash
# 新建文件夹和文件
for i in {1..10}
do
mkdir sanle$i -p
touch hunan$i
echo "完成新建文件夹和文件"
done
# 将新建的文件夹和文件剪切到 /feng123里面去
for i in {1..10}
do
mv sanle$i /feng123
mv hunan$i /feng123
done
##########################################
方法2
不用for循环,先进入到/feng123 ,然后直接新建文件夹和文件
[root@localhost lianxi]# cat dir10_file10way2.sh
#! bin/bash
mkdir /feng123 -p
cd /feng123
mkdir sanle{1..10} -p
touch hunan{1..10}
echo "完成新建文件夹和文件"
##########################################
3.删除多个文件或文件夹
思路:让用户输入要删除的文件夹或者文件的前缀,然后删除所有以这个前缀开头的文件夹或者文件
方法1
[root@localhost lianxi]# cat deletefiles.sh
#!/bin/bash
read -p "请输入要删除文件的目录(绝对路径):" filename
read -p "请输入要删除文件名:" delname
# 依据输入的路径进入目标所在的目录
cd ${filename}
# 进行删除
rm -rf ${delname}*
echo "删除完成!"
##########################################
方法2
[root@localhost lianxi]# cat rm_file.sh
#!/bin/bash
read -p "请输入要删除的文件名" rmfile_name
rm -rf ${rmfile_name}*
echo "已完成删除文件。"
##########################################
4.接受用户输入内容,创建文件或者文件夹
1.提醒用户输入文件夹的前缀名
2.提醒用户输入文件夹的数量
3.提醒用户输入文件夹的存放目录
4.进入用户输入的存放目录,用户指定数量的文件夹
例如:用户输入文件夹的前缀是feng,数量是20,存放目录/backup3,则在/backup3目录下新建feng1到feng20文件夹
5.显示效果在屏幕上
6.脚本名字叫 create_file.sh
脚本:
[root@localhost script]# cat create_file.sh
#! /bin/bash
# 接受用户输入的文件名前缀
read -p "请输入文件夹的前缀:" profile_name
# 文件的数量
read -p "请输入文件夹的数量:" filesnum
# 文件存放的路径
read -p "请输入文件夹的存放路径(绝对路径):" apath
# 进入文件存放的路径
cd ${apath}
# 使用for循环,引用seq序列的值
for i in $(seq ${filesnum})
do
mkdir ${profile_name}$i -p
echo "完成创建!"
done
# 显示文件夹的内容
echo "####################################"
ls $apath
echo "####################################"
知识点:
seq 产生一个序列
例如 产生一个 1-10的序列
[root@localhost script]# seq 10
1
2
3
4
5
6
7
8
9
10
$()的使用
用来得到命令的执行结果,然后赋值给变量
##########################################
5.统计/etc/passwd文件里面有多少行,输出给用户
[root@localhost lianxi]# cat passwd.sh
#! /bin/bash
nunl=$(cat /etc/passwd | wc -l)
echo "passwd 文件里面有$nunl行"
##########################################
6.用户输入一个文件,我们去帮忙统计有多少行,输出给用户
如果文件不存在,则提醒用户
[root@localhost lianxi]# cat lines.sh
#! /bin/bash
read -p "请输入要统计行数文件的路径:" aname
# 对文件进行判断,是否存在
if [ -f $aname ]
# 如果存在就统计行数,并输出
then
num1=$(cat $aname | wc -l)
echo "$name 里面有 $num1 行内容。"
else
# 如果不存在就报错。
echo "文件不存在,请重新输入!"
fi
知识点:
双分支if命令:
if 命令 --》当命令执行成功,就执行命令1,如果命令执行失败就执行命令2
then
命令1
else
命令2
fi
单分支if命令 --》如果命令执行成功,就执行命令1,否则不执行
if 命令
then 命令1
fi
for 变量名 in 集合
do
命令
done
变量名到几个里面去取佛那个下,先去集合里面第一个东西,然后去执行命令,再回到集合取第二个东西,再执行命令,知道集合里面所有东西都取出来,当所有东西都取完的时候,for循环就结束了
##########################################
7.如何循环输出文件夹里面的所有文件?
[root@localhost lianxi]# cat forfile.sh
#! /bin/bash
for i in /lianxi/*
# 或者用ls的方法。
# for i in $(ls /lianxi)
do
echo "$i 在/lianxi目录下面。"
done
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具