linux 查询 脚本.sh,项目引导main.sh脚本

为了方便管理项目,自己写了一个`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 $*

```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值