Linuxbash綜合執行個體之bash指令碼編輯器

來源:互聯網
上載者:User

Linuxbash綜合執行個體之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 "\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    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 "$@"


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.