【Linux】Shell脚本(文件操作)

在上一篇博客中,我分享了一些关于Shell编程的整理内容,希望能够为大家提供一些基础知识和入门指导。这次,我将继续和大家分享一些更具实用价值的Shell脚本示例,主要是以文件操作相关的内容。

批量重命名文件

shell 复制代码
	#!/bin/bash
	# Function: 批量更改当前目录下的指定文件类型名
	
	read -p "请输入文件后缀类型: " FILE_TYPE
	FILE=*.${FILE_TYPE}
	
	if [ -z FILE ]; then
	    echo "查无此文件后缀类型!"
	    exit 1
	fi
	
	for file in FILE
	do
	    echo "当前文件:$file"
	    read -p "请输入更改名: " newName
	    mv "$file" "${newName}.${FILE_TYPE}"
	    echo "Successfully Renamed $file to ${newName}.${FILE_TYPE}"
	done
  1. #!/bin/bash:这是一个Shebang行,用来指定使用哪种解释器来执行这个脚本,这里指定使用Bash解释器。
  2. # Function: 批量更改当前目录下的指定文件类型名:这是一个注释行,用来说明这个脚本的功能。
  3. read -p "请输入文件后缀类型: " FILE_TYPE :这一行通过read命令提示用户输入要更改的文件类型后缀,并将输入的值赋给变量FILE_TYPE
  4. FILE=*.${FILE_TYPE} :这一行将**FILE**变量设置为当前目录下所有以用户输入的文件类型后缀结尾的文件名。
  5. if [ -z FILE ]; then :这是一个条件判断语句,判断变量**FILE**是否为空,如果为空,则输出提示信息并退出脚本。
  6. for file in FILE :这是一个for循环,遍历变量**FILE**中的每个文件名。
  7. echo "当前文件:$file":输出当前处理的文件名。
  8. read -p "请输入更改名: " newName :提示用户输入新的文件名,并将输入的值赋给变量**newName**。
  9. mv "$file" "${newName}.${FILE_TYPE}" :使用**mv**命令将当前文件名更改为用户输入的新文件名,并保持文件类型后缀不变。
  10. echo "Successfully Renamed $file to ${newName}.${FILE_TYPE}":输出更改成功的提示信息。

批量处理文件

shell 复制代码
	#!/bin/bash
	#Function: 批量处理当前目录文件 edit view remove next quit
	
	DIRS=$1
	
	if [ ! -z $DIRS ] ; then
		echo "未设置位置参数!"
		exit 1
	fi
	
	for i in *
	do
		if [ ! -f i] ; then
			continue
		fi
	
		while true
		do
			echo -n "$i: Edit, View, Remove, Next, Quit? [e|v|r|n|q]: "
			read choice
			case $choice in
				e* )	vim $i;;
	
				v* ) cat $i;;
	
				r* ) rm -i $i && break;;
	
				n* ) break;;
	
				q*)  exit 0;;
	
				* ) echo "Illegal Option"
			esac
		done
	done
  1. #!/bin/bash:指定使用Bash解释器来执行这个脚本。
  2. #Function: 批量处理当前目录文件 edit view remove next quit:这是一个注释行,说明了这个脚本的功能。
  3. DIRS=$1:将位置参数$1赋给变量DIRS,这个脚本似乎没有使用到这个变量。
  4. if [ ! -z $DIRS ] ; then:检查变量DIRS是否为空,如果不为空,则输出提示信息并退出脚本。
  5. for i in *:遍历当前目录下的所有文件。
  6. if [ ! -f i] ; then continue fi:检查当前文件是否为普通文件,如果不是,则跳过当前循环。
  7. while true:进入一个无限循环,直到用户选择退出。
  8. echo -n "$i: Edit, View, Remove, Next, Quit? [e|v|r|n|q]: ":输出操作选项给用户选择。
  9. read choice:读取用户的选择。
  10. case $choice in:根据用户选择的操作进行不同的处理。
  11. e* ) vim $i;;:如果用户选择编辑,则使用vim编辑器打开当前文件。
  12. v* ) cat $i;;:如果用户选择查看,则使用cat命令显示当前文件内容。
  13. r* ) rm -i $i && break;;:如果用户选择删除,则使用rm命令删除当前文件,并且跳出内层循环。
  14. n* ) break;;:如果用户选择下一个文件,则跳出内层循环。
  15. q*) exit 0;;:如果用户选择退出,则退出脚本。
  16. ) echo "Illegal Option":如果用户选择了非法的操作,输出提示信息。

备份指定路径文件

shell 复制代码
	#!/bin/bash
	#Function: 备份指定路径文件
	
	# 定义备份的目的地目录
	BACKUP_PATH=~/backup
	
	
	# 生成一个时间戳,用于文件名
	DATE=$(date +%Y%m%d%H)
	
	if [ ! -d "$BACKUP_PATH" ]; then
		mkdir $BACKUP_PATH
	fi
	
	
	# 提示用户输入需要备份的源目录
	read -p "请输入您需要备份的目录路径: " source_path
	
	# 检查输入的目录是否存在
	if [ ! -d "$source_path" ]; then
	    echo "提供的目录不存在,请检查路径是否正确:$source_path"
	    exit 1
	fi
	
	# 执行备份操作
	tar -czf ${BACKUP_PATH}/backup-${DATE}.tar.gz -C "$source_path" .
	echo "已完成 $source_path 的备份,备份文件存储在 $BACKUP_PATH/backup-$DATE.tar.gz"
  1. #!/bin/bash:指定使用Bash解释器来执行这个脚本。
  2. #Function: 备份指定路径文件:这是一个注释行,说明了这个脚本的功能。
  3. BACKUP_PATH=~/backup:定义备份的目的地目录为用户的家目录下的backup文件夹。
  4. DATE=$(date +%Y%m%d%H):生成一个时间戳,用于备份文件名,格式为年月日时。
  5. if [ ! -d "$BACKUP_PATH" ]; then:检查备份目录是否存在,如果不存在则创建。
  6. read -p "请输入您需要备份的目录路径: " source_path:提示用户输入需要备份的源目录路径,并将输入的值赋给变量source_path。
  7. if [ ! -d "$source_path" ]; then:检查输入的源目录是否存在,如果不存在则输出错误信息并退出脚本。
  8. tar -czf ${BACKUP_PATH}/backup-${DATE}.tar.gz -C "$source_path" .:使用tar命令将指定路径的文件和目录打包成一个压缩文件,并存储在备份目录下,文件名包含了时间戳以区分不同的备份文件。
  9. echo "已完成 $source_path 的备份,备份文件存储在 $BACKUP_PATH/backup-$DATE.tar.gz":输出备份完成的提示信息,包括源目录路径和备份文件存储路径。
相关推荐
小杰帅气6 分钟前
进程优先级与切换调度
linux·运维·服务器
方便面不加香菜7 分钟前
Linux基本指令(1)
linux
华纳云IDC服务商7 分钟前
DNS负载均衡能自动避开故障服务器吗?
运维·服务器·负载均衡
济6179 分钟前
linux(第十四期)--Uboot移植(1)-- Ubuntu20.04
linux
奋斗的阿狸_198610 分钟前
键盘组合键监听与 xterm 唤醒程序
linux·运维·服务器
小张成长计划..13 分钟前
【linux】2:linux权限的概念
linux·运维·服务器
马踏岛国赏樱花15 分钟前
Windows与Ubuntu双系统,挂载D/E盘到Ubuntu下时只能读的问题
linux·windows·ubuntu
ben9518chen15 分钟前
Linux操作系统基本使用
linux·运维·服务器
一个平凡而乐于分享的小比特17 分钟前
CPU上电启动到程序运行全流程详解
linux·uboot·根文件系统·cpu上电到启动
以太浮标19 分钟前
华为eNSP模拟器综合实验之- HRP(华为冗余协议)双机热备
运维·网络·华为·信息与通信