Linux bash综合实例之 bash脚本编辑器

说明:这是一个比较简单的bash脚本编辑器,但是已经经过测试。书写此博客的原因,一方面是练习循环控制语言、函数、位置参数、本地变量以及函数参数调用,以及函数之间调用等等,还有就是获得用户选项以及选项的参数。

注:脚本选项以及脚本选项参数获得方法使用getopt并进行进一步判断,请查阅main()函数.

#!/bin/bash
# Author: 李安杰
# Time: 2014-12-05
show_usage(){
	 echo ‘Usage mkscript.sh [-D|--description "script description"] [-A|--author "script author"] /path/to/somefile‘
}

write_file_header(){
#写文件头部信息
local file_path="$1"
local desc=$2
local auth=$3
cat >> $file_path <<EOD
#!/bin/bash
# Description: $desc
# Author: $auth
#
EOD
}

create_file(){
# 创建新文件
local file_path="$1"
judge_dir $file_path
[ $? -eq 0 ] && write_file_header "$file_path" "$desc" "$auth"
 vim + $file_path
chk_syntax "$file_path" 
}

judge_dir(){
#判断目录是否存在切有写权限
local file_path="$1"
local dirname=$(dirname $file_path)
if [ -d "$dirname" ];then
	[ -w "$dirname" ] && return 0
else
	#echo "No such Directory or $dirname permission denied." 
	exit 1 
fi
}

chk_syntax(){
# 判断文件是否有脚本语法错误
local file_path="$1"
clear
if /bin/bash -n "$file_path" ;then
	chmod +x "$file_path"
    exit 0
else 
	while true;do
		read -p "
File has a syntax error, whether to continue editing. (y/n):" opts
		case $opts in
			y|Y)
				vim + "$file_path"
				chk_syntax "$file_path"
				;;
			n|N)
				exit 0
				;; 
		esac
	done   
fi
}

modify_file(){
# 文件修改相关操作
local file_path="$1"
local desc=$2
local auth=$3
judge_dir "$file_path"
if [ $? -eq 0 ] ;then
	header=$(head -1 "$file_path")
	if [ "$header" !=  "#!/bin/bash" ]; then
			echo "This is not a script file,grogram will be exit." && exit 1
	elif [ "$header" == ‘#!/bin/bash‘ ];then
		if [ ! -z "auth" ] && [ ! -z "$desc" ];then
			if grep "# Author:" "$file_path" && grep "# Description:" "$file_path";then
			sed -i "1,5 s/\(# Author:\).*/\1 $auth/" "$file_path"
			sed -i "1,5 s/\(# Description:\).*/\1 $desc/" "$file_path"
			else 
			sed -i "1a \# Author: $auth" "$file_path"
			sed -i "2a \# Description: $desc" "$file_path"
			fi
			vim + "$file_path"
			chk_syntax "$file_path"
		elif [ ! -z "$auth" ];then
			if grep ‘# Author:‘ "$file_path" ;then
			sed -i "1,5 s/\(# Author:\).*/\1 $auth/" "$file_path"
			else 
			sed -i "1a \# Author: $auth" "$file_path"
			fi
			vim + "$file_path"
			chk_syntax "$file_path"
		elif [ ! -z "$desc" ];then
			if grep ‘# Description:‘ "$file_path" ;then
			sed -i "1,5 s/\(# Description:\).*/\1 $desc/" "$file_path"
			else
			sed -i "2a \# Description: $desc/" "$file_path"
			fi
			vim + "$file_path"
			chk_syntax "$file_path"
		else
			vim + "$file_path"
			chk_syntax "$file_path"
		fi
	fi
fi
}

main(){
TEMP=`getopt -o A:D: --long author:,description: -- "[email protected]"`
[ $? -ne 0 ] && echo -e "\033[31mERROR: unknown argument! \033[0m\n" && show_usage && exit 1 
eval set -- "$TEMP"
#echo "$TEMP"
while true;do
	[ -z "$1" ] && show_usage && exit 1 
	case "$1" in 
		-D|--description)
			#该选项的参数就是$2
			desc=$2
			[ ${desc:0:1} == "-" ] && [ -z ${desc:2:1} ] && show_usage && exit 1 
			shift 2;;
		-A|--author)
			#该选项的参数就是$2
			auth=$2
			[ ${auth:0:1} == "-" ] && [ -z ${auth:2:1} ] && show_usage && exit 1
			shift 2;;
		--)
			shift
			[ $# -ne 1 ] && show_usage && exit 1
			file_path="$1"
			break;;
		*)
			#使用其他参数给提示错误,并退出.
			show_usage && exit 1
	esac
done
#echo "desc:$desc"
#echo "auth:$auth "
#echo "file_path: $file_path"
if [ ! -f "$file_path" ];then
	create_file "$file_path" && chk_syntax "$file_path"
elif [ -f "$file_path" ];then
	modify_file "$file_path" "$desc" "$auth"
fi 
}

main "[email protected]"

希望这篇博客能帮助到您,如果有更好的方法或改进的地方请,留言。谢谢您的耐心查阅。

时间: 2024-10-27 18:26:09

Linux bash综合实例之 bash脚本编辑器的相关文章

linux下数据库实例开机自启动设置

linux下数据库实例开机自启动设置 1.修改/oratab [[email protected] ~]# vi/etc/oratab     --把N改为Y,如下提示 # This file is used by ORACLEutilities.  It is created by root.sh # and updated by the Database ConfigurationAssistant when creating # a database. # A colon, ':', is

跟马哥学linux (lesson 7)Bash脚本基础知识

一.Linux程序分类: 1.守护进程(Daemon):开机自动启动 常见linux后台守护进程列举: amd:NFS守侯进程 apmd:高级电源治理 Arpwatch:记录日志并构建一个在LAN接口上看到的以太网地址和ip地址对数据库 Autofs:自动安装治理进程automount,与NFS相关,依靠于NIS crond:linux下的计划任务 Dhcpd:启动一个DHCP(动态IP地址分配)服务器 Httpd:WEB服务器 Inetd:支持多种网络服务的核心守候程序 Lpd:打印服务器 n

Linux系统裁剪之二(Bash脚本编程之十二)

Linux系统裁剪之二(Bash脚本编程之十二) 系统函数库 ·Linux系统的启动流程     1,POST(加电自检) 计算机本身并不会执行程序,它只是一堆破铜烂铁,但是它可以在开机的时候先去载入一段程序,系统在刚刚启动的时候能够实现将某个ROM芯片中的程序映射到CPU能够寻址的地址空间中去,并且让CPU能够执行其中的指令,这些指令大部分都是用来做系统检测的,当检测完成后,如果系统中所有的基本硬件和核心硬件都没有问题的话,接下来就会根据BIOS中设定的系统启动次序(Boot Sequence

Linux应用环境实战10:Bash脚本编程语言中的美学与哲学(转)

阅读目录 一.一切皆是字符串 二.引用和元字符 三.字符串从哪里来.到哪里去 四.再加上一点点的定义,就可以推导出整个Bash脚本语言的语法了 五.输入输出重定向 六.Bash脚本语言的美学:大道至简 总结: 我承认,我再一次地当了标题党.但是不可否认,这一定是一篇精华随笔.在这一篇中,我将探讨Bash脚本语言中的美学与哲学. 这不是一篇Bash脚本编程的教程,但是却能让人更加深入地了解Bash脚本编程,更加快速地学习Bash脚本编程. 阅读这篇随笔,不需要你有Bash编程的经验,但一定要和我一

Linux(centos 6.5) 调用java脚本以及定时运行的脚本实例及配置文件具体解释

Linux(centos 6.5) 调用java脚本以及定时运行的脚本实例 一.调用java程序脚本(默认已经搭建好了Java环境) 1.jdk 安装路径 /usr/jdk/jdk1.7/-- 2.java 程序路径 /usr/jdk 3.类名:Test.java(有主函数的类名) 4.调用java类的脚本,注意脚本的后缀是.sh 5.脚本内容: (1)#! /bin/bash // #! 特殊符号.说明这个脚本是由/bin 文件夹下的bash这个shell来解释并将解释后的内容给kernel来

Linux 学习作业:认识bash shell

本次记录bash shell基础知识及bash变量功能,bash操作环境的配置内容,涉及解释什么是shell?.bash变量的定义和引用.怎样读入与设定bash的环境配置文件等. ? Shell的基本概念 1. Shell是什么? Linux系统由3个重要部分组成: w 内核(kernel) w Shell w 应用程序 内核真正在控制着计算机系统上的各种硬件与软件.功能包括进程管理.内存管理.设备管理.文件系统管理等等. 内核相当抽象,使用者不易和它直接通信,因此需要一个良好的接口,使得操作时

Linux学习4——Vim和Bash

一.写在前面  本将将介绍Linux自带的强大的文本编辑器Vim和Bash的相关知识. 二.完成目标 1.了解Vim和Bash的基本概念 2.定制自己的vim 3.Bash中的一些命令 4.管道命令 三.基本概念 1.什么是Vi? Vi是Unix及Linux系统下标准的编辑器.学会它后,您将在Linux的世界里畅行无阻.更多 2.什么是Vim? Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.Vim是纯粹的自由软件.更多 3.为什么要学习Vim

Linux Shell编程之谈谈bash

Shell是一个命令行工具.Shell(也成为终端或者壳)充当的是人与内核(硬件)之间的翻译官.用户报一些命令"告诉"终端,他就会调用相应的程序服务去完成某些工作.现在包括红帽系统在内的许多主流的Linux系统默认使用的终端是Bash(Bourne Again SHell)解释器. 一.bash的优势 通过上下方向键来调取过往执行过得Linux命令 命令或参数仅需要输入前几位就可以用Tab键补全 具有强大的批处理脚本 具有实用的环境变量功能 二.bash的使用 如图,bash可以从标准

《生活在Linux中》之:在Bash的Emacs模式中使用Vim

export EDITOR=vim ctrl-x ctrl-e <生活在Linux中>之:在Bash的Emacs模式中使用Vim,码迷,mamicode.com