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()
遇到问题点1:CPU利用率截取,用命令top虽然可以看到CPU的使用率,但是这是动态的,无法进行sed操作,图片如下
最后使用top -n 1获取静态CPU使用率,再使用grep "Cpu" | awk '{print $2}' | sed "s/us,/ /"截取:图片如下
问题点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.
那么可以得出结论,直接使用以下代码,可以直接修改要求的文件信息
6.16 : 今天vi game.sh的时候,出现Swap file ".game.sh.swp" already exists!错误
原因:上次编辑异常退出当前文件,使用vim编辑文件实际是先copy 一份临时文件并映射到内存给你编辑, 编辑的是临时文件,当执行:w 后才保存临时文件到原文件,执行:q 后才删除临时文件。
解决办法:每次启动检索是否有临时文件, 有则询问如何处理,就会出现如上情景。将隐藏的 *.swp 文件删除即可,原先的文件便可再次编辑。
另一个问题:source 运行 game.sh脚本里第四个安装包的时候,出现如下信息
经过多次修改脚本依然无效,后来查找得知这不是一个错误讯息,只是一个提示!一个提示!一个提示!重要事情说三遍,执行完后VisualBoyAdvance依然能正常运行游戏
运行情况:
打开demo目录。
Game文件夹是游戏文件
Game_install是安装包文件
安装完成后的安装文件会放在temp
Out是VisualBoyAdvance运行文件
输入source game.sh可直接运行脚本
然后进入如下界面,可查看当前用户,日期,磁盘信息,IP,CUP使用情况
输入
数字键1~4可选择安装每个安装包
数字键5为一次性全部安装完毕
数字键6为运行游戏
输入数字键6进入游戏选择界面
可对游戏进行选择,运行结果如下:
脚本开发完成
源代码:
#!/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