Linux - shell脚本练习

目录

1.备份文件

2.新建10个文件夹和10个文件

3.删除多个文件或文件夹

4.接受用户输入内容,创建文件或者文件夹

知识点:

5.统计/etc/passwd文件里面有多少行,输出给用户

6.用户输入一个文件,我们去帮忙统计有多少行,输出给用户

如果文件不存在,则提醒用户

知识点:

7.如何循环输出文件夹里面的所有文件?


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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值