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

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

  1. shell编程实例 — 实现4G开机自动运行,实时监测,断线自动重拨》

    shell编程实例 - 实现4G开机自动运行,实时监测,断线自动重拨> 往事只能回味味道 于 2021-11-20 02:30:53 发布831 收藏 1 分类专栏: shell 文章标签: u ...

  2. python实现一个整数加法计算器_如何使用python编程写一个加法计算器-Python教程...

    一.关上idle.点击file,而后点击new file.这是创立一个新的文件. 新建一个文件之后,咱们输出第一行代码,应用print函数,正在屏幕上打印一句话,此中字符串要应用双引号,输出法要应用英 ...

  3. Linux Shell CentOS 写一个输出命令 支持颜色

    文章目录 Linux Shell CentOS 写一个输出命令 支持颜色 相关阅读 1.代码 2.演示 Linux Shell CentOS 写一个输出命令 支持颜色 相关阅读 Linux Shell ...

  4. 手把手教你如下在Linux下如何写一个C语言代码,编译并运行

    文章目录 手把手教你如下在Linux下如何写一个C语言代码,编译并运行 打开Ubuntu终端 创建 helloworld.c 编译C文件 手把手教你如下在Linux下如何写一个C语言代码,编译并运行 ...

  5. [WinForm]写一个小程序把指定目录的程序添加到开机自动启动(无法绕过360检查)

    网友阿东提示了这样一个需求:写一个小程序把指定目录的程序添加到开机自动启动,跳过360 我就到百度上搜了一下:C# 将程序添加到启动项 (写入注册表),及从启动项中删除 - 赤狐(zcm123) - ...

  6. 写一个简单的自动取款机c语言程序,C语言编程模仿银行ATM自动取款机功能

    编程模仿银行ATM自动取款机功能,要求能实现以下功能: 1. 输入储户基本信息(既开户功能,开户成功需要打印储户基本信息): 2. 开户成功后打印欢迎界面,比如"开户成功,欢迎使用**银行自 ...

  7. 《shell编程实例 — 实现4G开机自动运行,实时监测,断线自动重拨》

    1.GPRS自动拨号脚本(真正的实时监控,断线自动重拨) 功能:开机自动运行,实时监控,断线自动重拨. 原设置为5秒去检测一次,是以1字节去PING. 1.GPRS自动拨号脚本(真正的实时监控,断线自 ...

  8. win32框架,GDI图形编程写一个HelloWorld游戏_c语言

    1.如图,实现功能: Hello World!字符串跟随鼠标移动 鼠标左击Hello World!颜色为红色 鼠标右击Hello World!颜色为蓝色 鼠标滚轮滚动改变Hello World!颜色的 ...

  9. python面对对象编程写一个程序有一个汽车_汽车类面向对象编程Python

    我正在定义一个名为"car"的类,我将它与一个在我的类上运行一系列测试的文档进行比较.然而,我在驱动法中得到了错误的答案,我不知道为什么.在 这是我的密码.驱动方法应该以汽车为参数 ...

最新文章

  1. java $.getjson_JQuery 获取json数据$.getJSON方法的实例代码
  2. 修复Chrome上的ERR_TOO_MANY_REDIRECTS错误?
  3. proteus里面没有stm32怎么办_学习STM32日志——独立看门狗实验(20.06.23)
  4. vat可以退税吗_【涨知识】企业对外投资可以申请出口退税吗?
  5. JAVA反射系列之Method,java.lang.reflect.Method的使用
  6. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:表格单元格使用了 bg-primary 类...
  7. 网站跳出率的相关要点介绍
  8. 这个可能打败Python的编程语言,正在征服科学界
  9. Sobel两种算子形式
  10. 2.0版本中如何取得当前的控制器和方法
  11. 将中国标准时间转换成标准格式的代码
  12. 关于MySQL buffer pool的预读机制
  13. WebLogic 11gR1修改jdk版本
  14. Super Mario HDU 4417 主席树区间查询
  15. arch Linux安装到U盘,如何把ArchLinux安装到U盘上
  16. models.TABLE.objects.filter()与models.TABLE.objects.get()的区别
  17. 案例分析十大管理领域理论背诵要点
  18. 纸牌游戏洗牌发牌排序算法设计
  19. Python 学习笔记 元组 xxxxxxx XXXXXXXXXX
  20. ETW架构以及WPT(Windows Performance Toolkit)命令行的使用

热门文章

  1. 基于时空图卷积网络的高速列车调度列车延误预测
  2. 英语外刊精读(Part 1):day1,泛读;day2,精读(上); day3,精读(下);
  3. git版本控制命令行说明
  4. vue 范围拖选插件
  5. 分享灵动微电子低功耗单片机MM32L系列
  6. GDAL+Python | 实现栅格影像处理之栅格矢量化及矢量栅格化
  7. 关于IDEA在创建Maven子模块后的pom.xml文件没有parent标签的解决方法。
  8. putty窗口标题修改、字体颜色修改等简单配置以及putty多开工具mtputty的使用
  9. MySQL中间件Atlas
  10. matlab导入las格式点云,LAS 点云数据格式