虚位以待(AD)
虚位以待(AD)
首页 > 操作系统 > LINUX > Linuxbash综合实例之bash脚本编辑器

Linuxbash综合实例之bash脚本编辑器
类别:LINUX   作者:码皇   来源:love android     点击:

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

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

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

    #!/bin/bash# Author: 李安杰# Time: 2014-12-05show_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=$2local auth=$3cat >> $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_pathchk_syntax "$file_path" }
    judge_dir(){
    #判断目录是否存在切有写权限local file_path="$1"local dirname=$(dirname $file_path)if [ -d "$dirname" ];
    then [ -w "$dirname" ] && return 0else #echo "No such Directory or $dirname permission denied." exit 1 fi}
    chk_syntax(){
    # 判断文件是否有脚本语法错误local file_path="$1"clearif /bin/bash -n "$file_path" ;
    then chmod +x "$file_path" exit 0else 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=$2local auth=$3judge_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 fifi}
    main(){
    TEMP=`getopt -o A:D: --long author:,description: -- "$@"`[ $? -ne 0 ] && echo -e "33[31mERROR: unknown argument! 33[0mn" && 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 esacdone#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 "$@"


相关热词搜索: 编辑器 脚本 实例