為了方便管理項目,自己寫了一個`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 $*
```
- 圖片處理
- 調整圖片像素大小
- Python控制攝像頭拍照
- 文件操作
- 提取文件名,擴展名
- 查找文件
- ls列出目錄,文件
- shell解析json串
- 讀取文件第n行內容
- 將變量寫入文件和從文件讀取變量的一中方法
- shell操作二進制文件
- 命令行將ppt轉換為pdf
- python讀取串口數據
- 查最近修改的文件
- awk的一些操作
- 輸入輸出
- 判斷輸入是否為數字
- 獲取腳本輸入的第 i 個參數
- column實現輸出列表對齊
- 串口調試腳本
- 按鍵實時檢測
- 網絡腳本
- 基于Python的TCP客戶端
- bash將字符轉換為urlencode
- 掛載遠程文件夾到本地
- 其他功能
- shell隨機產生某一個范圍內的整數
- 刪除、替換字符串中指定的字符
- 獲取時間日期并打印
- 字符串反轉
- 實用功能
- 自定義函數模板
- shell中包含另一個腳本文件實現include的方法
- Bash下實現自定義指令的幾種方法
- 根據文件類型自動執行腳本
- 命令行運行matlab
- 項目引導main.sh腳本
- 新建文件模板腳本
- bash實現讀取和改寫ini文件
- 添加當前路徑到fish shell環境變量
- 查詢進程并殺死進程
- 帶界面的身份驗證
- 常用軟件
- 基本軟件
- 我喜歡的軟件
- 自用帶有界面的系統修復工具-repair
- 解析xml文件