shell脚本案例演习

脚本案例

1.自动备份文件或目录:

#!/bin/bash
# 设置备份目录
backup_dir="/path/to/backup/dir"
# 设置要备份的文件或目录
files_to_backup="/path/to/files /path/to/dir"
# 创建一个日期时间戳
timestamp=$(date +%F_%T)
# 备份文件
tar -czvf "${backup_dir}/backup_${timestamp}.tar.gz" ${files_to_backup}

2.批量重命名文件:

#!/bin/bash
# 设置文件扩展名
extension=".txt"

# 遍历当前目录下的所有文件
for file in *${extension}
do
  # 获取文件名(不包括扩展名)
  filename=$(basename "${file}" "${extension}")
  # 重命名文件
  mv "${file}" "${filename}_new${extension}"
done

3.批量删除文件

#!/bin/bash

# 设置文件扩展名
extension=".tmp"

# 遍历当前目录下的所有文件
for file in *${extension}
do
  # 删除文件
  rm "${file}"
done

4.查找并删除指定名称的文件:

#!/bin/bash

# 设置文件名
filename="example.txt"

# 查找并删除文件
find . -name "${filename}" -delete

5.查找并替换文件内容:

#!/bin/bash

# 设置要查找的字符串
search_string="aaa"

# 设置要替换成的字符串
replace_string="AAA"

# 查找并替换文件内容
find . -type f -exec sed -i "s/${search_string}/${replace_string}/g" {} \;

6.批量创建文件:

#!/bin/bash

# 设置文件名前缀
prefix="file"

# 设置文件数量
num_files=10

# 循环创建文件
for i in $(seq 1 ${num_files})
do
  touch "${prefix}${i}.txt"
done

7.创建文件夹并移动文件:

#!/bin/bash

# 设置文件夹名称
dir_name="new_dir"

# 设置要移动的文件
files_to_move="file1.txt file2.txt"

# 创建文件夹并移动文件
mkdir ${dir_name} && mv ${files_to_move} ${dir_name}

8.在文件夹中查找文件:

#!/bin/bash

# 设置文件夹路径
dir_path="/path/to/dir"

# 设置文件名
filename="example.txt"

# 在文件夹中查找文件
find ${dir_path} -name "${filename}"

9.计算文件夹中文件数量:

#!/bin/bash

# 设置文件夹路径
dir_path="/path/to/dir"

# 计算文件数量
num_files=$(find ${dir_path} -type f | wc -l)

echo "Number of files in ${dir_path}: ${num_files}"

10.计算文件夹大小:

#!/bin/bash

# 设置文件夹路径
dir_path="/path/to/dir"

# 计算文件夹大小
dir_size=$(du -sh ${dir_path})

echo "Size of ${dir_path}: ${dir_size}"

11.定时执行命令:

#!/bin/bash

# 设置命令
command="echo hello"

# 设置执行周期(以秒为单位)
period=10

# 定时执行命令
while true
do
  eval ${command}
  sleep ${period}
done

12.发送邮件:

#!/bin/bash

# 设置收件人邮箱
to="recipient@example.com"

# 设置发件人邮箱
from="sender@example.com"

# 设置邮件主题
subject="Test Email"

# 设置邮件内容
body="This is a test email."

# 发送邮件
echo "${body}" | mail -s "${subject}" -r "${from}" "${to}"

13.批量解压缩文件:???

#!/bin/bash

# 设置文件扩展名
extension=".tar.gz"

# 遍历当前目录下的所有文件
for file in *${extension}
do
  # 解压缩文件
  tar -xvzf ${file}
done

14.在文件夹中查找并删除文件:

#!/bin/bash

# 设置文件夹路径
dir_path="/path/to/dir"

# 设置要删除的文件扩展名
extension=".tmp"

# 在文件夹中查找并删除文件
find ${dir_path} -name "*${extension}" -delete

15.批量重命名文件:

#!/bin/bash

# 设置文件扩展名
extension=".old"

# 设置新文件扩展名
new_extension=".new"

# 遍历当前目录下的所有文件
for file in *${extension}
do
  # 获取文件名(不包含扩展名)
  filename=$(basename "${file}" "${extension}")
  
  # 重命名文件
  mv "${file}" "${filename}${new_extension}"
done

16.对文件夹中的文件按修改时间排序:

#!/bin/bash

# 设置文件夹路径
dir_path="/path/to/dir"

# 对文件夹中的文件按修改时间排序
find ${dir_path} -type f -printf "%T@ %p\n" | sort -n
%T 显示大秒数
#[root@iptables ~]# find dir2/ -type f -printf "%T@\n" | sort -n
1749561722.7220277410
1749561722.7220277410
%p显示路径
[root@iptables ~]# find dir2/ -type f -printf "%T@ %p\n" | sort -n
1749561722.7220277410 dir2/file1.txt
1749561722.7220277410 dir2/file2.txt

17.批量转换文件格式:

#!/bin/bash

# 设置文件扩展名
extension=".txt"

# 设置新文件扩展名
new_extension=".md"

# 遍历当前目录下的所有文件
for file in *${extension}
do
  # 转换文件格
pandoc -s "${file}" -o "${file/${extension}/${new_extension}}"
done


注意:需要先安装Pandoc。

18.删除文件夹中的空文件夹:

#!/bin/bash

# 设置文件夹路径
dir_path="/path/to/dir"

# 删除文件夹中的空文件夹
find ${dir_path} -type d -empty -delete

19.删除文件夹中的空文件:

#!/bin/bash

# 设置文件夹路径
dir_path="/path/to/dir"

# 删除文件夹中的空文件
find ${dir_path} -type f -empty -delete
-empty 寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录

20.批量更改文件权限:

#!/bin/bash

# 设置文件夹路径
dir_path="/path/to/dir"

# 设置文件权限(以八进制表示)
permission="644"

# 批量更改文件权限
find ${dir_path} -type f -exec chmod ${permission} {} \;

#批量更改“.txt”的文件权限
dir_name="dir2/"
extension=".txt"
#设置文件权限
permission="666"
#批量更改文件权限
find ${dir_name} -name "*${extension}" -exec chmod ${permission} {} \;

-exec <命令> {} \;
{}:占位符,会被 find 自动替换为当前匹配的文件路径(如/data/files/report.txt)
\;:结束符,表示对每个匹配的文件单独执行一次命令(即逐文件执行 chmod)

21.使用awk分隔文件???

#!/bin/bash
# 本脚本的作用是读取文件中的内容,并对其进行awk分隔输出

# 设置被读取的文件
filename=$1

info=`awk -F " " '{printf "%-8s %-8s %-8s %-8s\n",$2,$4,$5,$6}' $filename`
# 输出awk的内容
printf "异常机器名称为  运营商为 异常地区  异常问题 \n$info"
或者echo -e "异常机器名称为  运营商为 异常地区  异常问题 \n$info"

info=$(awk -F " " '{printf "%-8s %-8s %-8s %-8s\n",$2,$4,$5,$6}' $filename)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值