Bash Script Editor for Linuxbash integrated instances
Note: This is a simple bash Script Editor, but it has been tested. The reason for writing this blog is to exercise loop control language, functions, location parameters, local variables, function parameter calls, and inter-function calls, there is also the parameters for Obtaining user options and options.
Note: Use getopt to obtain the script options and script option parameters for further judgment. Please refer to the main () function.
#! /Bin/bash # Author: Li anjie # Time: 2014-12-05show_usage () {echo 'usage mkscript. sh [-D | -- description "script description"] [-A | -- author "script author"]/path/to/somefile '} write_file_header () {# Write File Header Information local file_path = "$1" local desc = $2 local auth = $ 3cat >>$ file_path <EOD #! /Bin/bash # Description: $ desc # Author: $ auth # EOD} create_file () {# create a new 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 () {# Check whether the directory has the write permission: 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 () {# identify whether the file has a script syntax error. local file_path =" $1 "clearif/bin/bash-n" $ file_path "; then chm Od + 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 () {# File Modification related operation local file_path = "$1" local desc = $2 local 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" 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 "\ 033 [31 mERROR: 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) # The parameter of this option is $2 desc = $2 [$ {desc: 0: 1 }== "-"] & [-z $ {desc: 2: 1}] & show_usage & exit 1 shift 2;-A | -- author) # The parameter of this option is $2 auth = $2 [$ {auth: 0: 1 }== "-"] & [-z $ {auth: 2: 1}] & show_usage & exit 1 shift 2 ;;--) shift [$ #-ne 1] & show_usage & e Xit 1 file_path = "$1" break; *) # use other parameters to indicate an error and exit. 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 "$ @"