用Shell编程写一个能实现自动安装目录和运行游戏的脚本

By:C_linux-yu

 

Shell编程写一个能实现自动安装目录和运行游戏的脚本

设计框架 :使用宏定义保存目录路径,方便切换

  封装页面函数,目录安装函数,游戏运行函数供调用

  主体使用while,case,if

 

6.15 :基本建立框架,

设定页面函数

System_infomation(),               

Enter_choice(),Run_game_choice();

 

设定安装函数:

Install_zlib()----zlib包的安装

   Install_libpng()------libgng包的安装

Install_SDL()------SDL包的安装

Install_VisualBoyAdvance()----VisualBoyAdvance的安装

 

设定游戏运行函数:

game_run_012(),game_run_013()

game_run_016(),game_run_super()

 

遇到问题点1CPU利用率截取,用命令top虽然可以看到CPU的使用率,但是这是动态的,无法进行sed操作,图片如下

 

 用Shell编程写一个能实现自动安装目录和运行游戏的脚本_第1张图片

 

 

最后使用top -n 1获取静态CPU使用率,再使用grep "Cpu" | awk '{print $2}' | sed "s/us,/ /"截取:图片如下

 

 

 用Shell编程写一个能实现自动安装目录和运行游戏的脚本_第2张图片

 

 

问题点2:安装第四个VisualBoyAdvance安装包时,需要使用脚本更改以下文件# vim src/Util.cpp# vim src/GBA.cpp的信息,刚开始使用awk | sed组合,发现无法更改,后来直接使用sed对文本操作,更改成功,结论,可以直接使用sed对文件定点定位修改,功能强大!

 

修改语句如下:

sudo sed -i "1133s/char/const char/" GBA.cpp -----直接对GBA.cpp

文件中的第1133行的char全部替换为 const char.

 

那么可以得出结论,直接使用以下代码,可以直接修改要求的文件信息

 用Shell编程写一个能实现自动安装目录和运行游戏的脚本_第3张图片

 

6.16 今天vi game.sh的时候,出现Swap file ".game.sh.swp" already exists!错误

       原因:上次编辑异常退出当前文件,使用vim编辑文件实际是先copy 一份临时文件并映射到内存给你编辑, 编辑的是临时文件,当执行:w 后才保存临时文件到原文件,执行:q 后才删除临时文件。

 

解决办法:每次启动检索是否有临时文件, 有则询问如何处理,就会出现如上情景。将隐藏的 *.swp 文件删除即可,原先的文件便可再次编辑。

 

另一个问题:source 运行 game.sh脚本里第四个安装包的时候,出现如下信息

 用Shell编程写一个能实现自动安装目录和运行游戏的脚本_第4张图片

 

 

经过多次修改脚本依然无效,后来查找得知这不是一个错误讯息,只是一个提示!一个提示!一个提示!重要事情说三遍,执行完后VisualBoyAdvance依然能正常运行游戏

 

 

运行情况:

打开demo目录。

Game文件夹是游戏文件

Game_install是安装包文件

安装完成后的安装文件会放在temp

OutVisualBoyAdvance运行文件

输入source game.sh可直接运行脚本

 

然后进入如下界面,可查看当前用户,日期,磁盘信息,IPCUP使用情况

输入

数字键1~4可选择安装每个安装包

数字键5为一次性全部安装完毕

数字键6为运行游戏

 用Shell编程写一个能实现自动安装目录和运行游戏的脚本_第5张图片

 

 

 

 

输入数字键6进入游戏选择界面

 

 用Shell编程写一个能实现自动安装目录和运行游戏的脚本_第6张图片

可对游戏进行选择,运行结果如下:

 

 用Shell编程写一个能实现自动安装目录和运行游戏的脚本_第7张图片

 

脚本开发完成


源代码:

#!/bin/bash


BS_DIR_TOP=$(cd `dirname $0` ; pwd)
BS_DIR_GAME=${BS_DIR_TOP}/game
BS_DIR_INSTALL=${BS_DIR_TOP}/game_install
BS_DIR_OUT=${BS_DIR_TOP}/out
BS_DIR_TEMP=${BS_DIR_TOP}/temp
echo $BS_DIR_TOP
SB=1


System_infomation()
{
echo "------------------System Infomation----------------------"
echo "| DATE : `date | awk '{print $6"  "$2"  "$3"  "$4}'` |"
echo "| HOSTNAME: `echo "$USER"` |"
echo "| USER : `echo "$USER"` |"
echo "| DISKUSER: `df -h | grep "^/" | awk '{print $5}'` |"
echo "| HOSRIP : `ifconfig | grep "Bcast" | sed "s/:/ /" | awk '{print $3}'` |"
echo "| CPU_USER: `top -n 1 | grep "Cpu" | awk '{print $2}' | sed "s/us,/ /"` |"
echo "---------------------------------------------------------"
}




Enter_choice()
{
echo "---------------------------------------------------------"
echo "|********    Please Enter Your Choice:[1-7]   **********|"
echo "---------------------------------------------------------"
echo "(1) install zlib"
echo "(2) install libpng"
echo "(3) install SDL"
echo "(4) install VBA"
echo "(5) install all"
echo "(6) run game"
echo "(7) Qite"
echo "Please enter your choice[1-7]:"
}


Run_game_choice()
{
echo "---------------------------------------------------------"
echo "|********    Please Enter Your run game:[0-5]   **********|"
echo "---------------------------------------------------------"
echo "(1)012-01<忍者神龟>汉化版"
echo "(2)013-03<超级街头霸王>"
echo "(3)016-016-超级玛丽奥"
echo "(4)super"
echo "(5)quit"
}


Install_zlib()
{


tar xvfz ${BS_DIR_INSTALL}/zlib-1.2.7.tar.gz -C ${BS_DIR_TEMP}
echo "tar xvfz zlib-1.2.7.tar.gz is OK"
cd ${BS_DIR_TEMP}/zlib-1.2.7
sudo ./configure
echo "./configure OK"
sudo make
echo "make OK"
sudo make install
echo "make install OK"
}


Install_libpng()
{
if [ -d ${BS_DIR_TEMP}/zlib-1.2.7 ]; then
echo "tar xvfz libpng"
tar xvfz ${BS_DIR_INSTALL}/libpng-1.2.37.tar.gz -C ${BS_DIR_TEMP}
cd ${BS_DIR_TEMP}/libpng-1.2.37
sudo ./configure
echo "./configure OK"
sudo make
echo "make OK"
sudo make install
echo "make install"
else 
echo "can not find your zlib-1.2.7"
fi
}


Install_SDL()
{
if [ -d ${BS_DIR_TEMP}/zlib-1.2.7 ] && [ -d ${BS_DIR_TEMP}/libpng-1.2.37 ]; then
echo "tar xvfz SDL"
tar xvfz ${BS_DIR_INSTALL}/SDL-1.2.15.tar.gz -C ${BS_DIR_TEMP}
cd ${BS_DIR_TEMP}/SDL-1.2.15
sudo ./configure
echo "./configure"
sudo make
echo "make OK"
sudo make install
echo "make install OK"
else
echo "can not find zlib-1.2.7 or libpng-1.2.37"
fi
}


Install_VisualBoyAdvance()
{
if [ -d ${BS_DIR_TEMP}/zlib-1.2.7 ] && [ -d ${BS_DIR_TEMP}/libpng-1.2.37 ] && [ -d ${BS_DIR_TEMP}/SDL-1.2.15 ]; then
echo "tar xvfz VisualBoyAdvance"
tar xvfz ${BS_DIR_INSTALL}/VisualBoyAdvance-src-1.7.2.tar.gz -C ${BS_DIR_TEMP}
cd ${BS_DIR_TEMP}/VisualBoyAdvance-1.7.2
#sleep 3
echo "./configure"
sudo ./configure
echo "sed -i"
#sleep 3
#sudo make
cd ${BS_DIR_TEMP}/VisualBoyAdvance-1.7.2/src
sudo sed -i "1133s/char/const char/" GBA.cpp
sudo sed -i "1148s/char/const char/" GBA.cpp
sudo sed -i "1172s/char/const char/" GBA.cpp
sudo sed -i "1192s/char/const char/" GBA.cpp

#sudo make
sudo sed -i "481s/char/const char/" Util.cpp
sudo sed -i "505s/char/const char/" Util.cpp
sudo sed -i "525s/char/const char/" Util.cpp
sudo sed -i "555s/char/const char/" Util.cpp
sudo sed -i "987s/void */gzFile_s/" Util.cpp
cd ${BS_DIR_TEMP}/VisualBoyAdvance-1.7.2
echo "make"
sudo make
echo "make install"
sudo make install
cp ${BS_DIR_TEMP}/VisualBoyAdvance-1.7.2/src/sdl/VisualBoyAdvance ${BS_DIR_OUT}
else
echo "can not find zlib-1.2.7 or libpng-1.2.37 or SDL-1.2.15"
fi
}


game_run_012()
{
echo "game running......."
cd ${BS_DIT_OUT}
VisualBoyAdvance -c ${BS_DIR_TEMP}/VisualBoyAdvance-1.7.2/src/VisualBoyAdvance.cfg -3 ${BS_DIR_GAME}/012-01忍者神龟》\ 汉化版.gba 


}


game_run_013()
{
echo "game running........"
cd ${BS_DIR_OUT}
VisualBoyAdvance -c ${BS_DIR_TEMP}/VisualBoyAdvance-1.7.2/src/VisualBoyAdvance.cfg -3 ${BS_DIR_GAME}/013-03超级街头霸王2.gba


}


game_run_016()
{
echo "game running........"
cd ${BS_DIR_OUT}
VisualBoyAdvance -c ${BS_DIR_TEMP}/VisualBoyAdvance-1.7.2/src/VisualBoyAdvance.cfg -3 ${BS_DIR_GAME}/016-超级玛丽奥.gba 


}


game_run_super()
{
echo "game running ........."
cd ${BS_DIR_OUT}
VisualBoyAdvance -c ${BS_DIR_TEMP}/VisualBoyAdvance-1.7.2/src/VisualBoyAdvance.cfg -3 ${BS_DIR_GAME}/super.gba 


}


System_infomation
while [ $SB ]; do
    Enter_choice
    read number
    case $number in
1)
Install_zlib
;;
2)
Install_libpng
;;
3)
Install_SDL
;;
4)
Install_VisualBoyAdvance
;;
5)
Install_zlib
Install_libpng
Install_SDL
Install_VisualBoyAdvance
;;
6)
while [ $SB ]; do


Run_game_choice
read num
if [ $num -eq 1 ]; then
game_run_012
else if [ $num -eq 2 ]; then
game_run_013
else if [ $num -eq 3 ]; then
game_run_016
else if [ $num -eq 4 ]; then
game_run_super
else if [ $num -eq 5 ]; then
echo "quit"
return 0
else
echo "enter number error,please enter again"
fi
fi
fi
fi
fi
done
;;
7)
echo "quit"
cd ${BS_DIR_TOP}
return 0
;;
*)
echo "number error plase enther again!"
;;
    esac
done

最后更新日期  2017.6.16

你可能感兴趣的:(用Shell编程写一个能实现自动安装目录和运行游戏的脚本)