🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
为了方便管理项目,自己写了一个`main.sh`脚本。根据需要简单修改即可很好的使用! ```bash #!/usr/bin/env bash cd $(dirname $0) main(){ #LsFileType sh fish DirMenuMain #AutoMenu } #------------------------------ #自动菜单,包含所有文件夹和文件, #按优先级决定执行 #------------------------------ function AutoMenu(){ echo " " echo "++++++++++++++++++ $(basename $PWD) ++++++++++++++++++" local m=$(ls) #未检测到目标自动执行当前路径下的run脚本 if [ ${#m} -eq 0 ] || [ -f run ] || [ -f run.sh ] || [ -f run.fish ];then ExecRun exit 0 fi echo "0.退出" DisplayList $m echo "" && read -p "输入对应菜单的序号:" key if [ $(IsNumber $key) -eq 0 ] ; then test $key -eq 0 && exit 0 local src=$(echo $m |xargs -n1|sed -n ''$key'p') #获取指定编号的内容 if [ -d $src ] ;then cd $src AutoMenu elif [ -f $src ] ;then echo ">自动执行$src文件" ReadFileTypeAndAutoRun $src exit 0 fi else echo "输入的不是数字!" fi } #------------------------------ #以文件夹名称作为菜单名,文件夹下存在 #run/run.sh文件就执行该文件,否则列 #出该目录下的文件夹名称作为菜单名 #------------------------------ function DirMenuMain(){ echo " " echo "++++++++++++++++++ $(basename $PWD) ++++++++++++++++++" local m=$(LsDir) #当前路径下没有下一级目录或者当前目录下存在 run/run.sh/run.fish脚本则自动执行脚本 if [ ${#m} -eq 0 ] || [ -f run ] || [ -f run.sh ] || [ -f run.fish ];then ExecRun exit 0 fi echo "0.退出" DisplayList $m echo "" && read -p "输入对应菜单的序号:" key if [ $(IsNumber $key) -eq 0 ] ; then test $key -eq 0 && exit 0 local src=$(echo $m |xargs -n1|sed -n ''$key'p') #获取指定编号的内容 cd $src DirMenuMain else echo "输入的不是数字!" fi } #------------------------------ #为输入的对象添加索引并显示,索引从1 #开始 #@param:输入的资源 #------------------------------ function DisplayList(){ local idx=1 for i in $* do echo "$idx.${i%.*}" idx=$[idx+1] done } #------------------------------ #列出当前目录下的所有目录 #------------------------------ function LsDir() { for i in $(ls) do test -d $i && echo $i done } #------------------------------ #自动执行当前路径下的特定脚本 #按优先级: #1. run #2. run.sh #3. run.fish #------------------------------ function ExecRun(){ echo "当前路径为:$PWD" if [ -f run ] ;then echo ">存在run文件,执行run脚本" chmod +x run ./run $* elif [ -f run.sh ]; then echo ">存在run.sh文件,执行run.sh脚本" chmod +x run.sh ./run.sh $* elif [ -f run.fish ]; then echo ">存在run.fish文件,执行run.fish脚本" chmod +x run.sh ./run.sh $* else echo "不存在run或者run.sh脚本" fi } #------------------------------ #列出当前目录下的所有目录,最前面 #添加序号 #------------------------------ function LsDirAddIndex() { local idx=1 local arr='' for i in $(ls) do test -d $i && echo "$idx:$i" && idx=$[idx+1] done } #------------------------------ #判断字符串是否为数字 #@return 0:是 1:不是 #------------------------------ function IsNumber(){ local y=$(echo "$1" | sed 's/[0-9]//g') if [ -z "$y" ];then echo 0 #是数字 else echo 1 #"不是数字" fi } #------------------------------ #文件类型筛选 #列出当前目录下所有满足指定后缀的 #文件 #@param:文件后缀 #例如:LsFileType sh fish plt #------------------------------ function LsFileType(){ local src="" for i in $* do find . -maxdepth 1 -type f -name "*.$i" done } #----------------------------------------- #函数名:ReadIni #功能:读取ini文件 #@param1:ini文件路径 #@param2:Section #@param3:Option #例如:ReadIni test.ini s2 Path #----------------------------------------- function ReadIni(){ fid=$1 section=$2 option=$3 test ! -f $fid && echo "不存在文件$fid" && exit 2 if [ $# -eq 3 ] ; then cat $fid | awk '/\['$section'\]/{f=1;next} /\[*\]/{f=0} f' | #找出section下的所有内容 grep $option | # 匹配option的行 grep '=' | # 看看是不是存在= cut -d'=' -f2| # 获取对应的值 cut -d'#' -f1| # 去除注释 cut -d';' -f1| #去除注释 awk '{gsub(/^\s+|\s+$/, "");print}' #去掉最前面的空格 fi } #------------------------------ #自动根据文件后缀选择执行方式 #@param1:指定的文件 #------------------------------ function ReadFileTypeAndAutoRun(){ test ! -f $1 && echo "不存在$1文件" && exit 2 local srcpath=$(readlink -f $1) cd $(dirname $srcpath) local dst=$(date +%Y%m%d%H%M%S.mgo) #临时文件 chmod +x $(basename $srcpath) case $1 in *.sh | *.fish | *.pl | *.tcl | *.tk | *.py | *.lua) chmod +x $1 && ./$1 ;; *.c) gcc -o $dst $1 && chmod +x $dst && ./$dst;; *.cpp) g++ -std=c++11 -o $dst $1 && chmod +x $dst && ./$dst;; *.go ) go build -o $dst $1 && chmod +x $dst && ./$dst ;; *.plt) gnuplot $1 ;; #gnuplot * ) echo "Fuck! I don't konw what it is!" ;; esac test -f $dst && rm $dst &>/dev/null } main $* ```