程序功能
用于实现一个综合应用程序,包括打印常用Shell命令手册、石头剪刀布游戏和加减乘除计算器。
程序结构
运行截图
代码实现
1 #!/bin/bash 2 #一个综合应用脚本程序 3 4 # 安装必备工具 5 function init { 6 case $1 in 7 1 ) 8 sudo apt-get install bc dialog;; 9 2 ) 10 sudo dnf install bc dialog;; 11 # 其他Linux发行版的包管理工具可以自行添加 12 * ) 13 echo "程序退出成功" 14 exit 0;; 15 esac 16 } 17 18 # 检测是否有安装bc与dialog包,若无将通无法运行该脚本,将进行安装 19 which bc dialog 20 if [[ $? -ne 0 ]]; then 21 echo "即将安装dialog" 22 echo "1. Debian " 23 echo "2. Red Hat " 24 echo "3. 退出安装 " 25 read -p "请选择您的系统发行版本:" sys 26 init $sys 27 fi 28 29 # 使用mktemp生成临时文件进行程序的临时数据记录 30 # 负责记录综合应用菜单(主菜单)的选择 31 mian_select=`mktemp main_select.XXXXXX` 32 # 负责记录shell命令类别的选择 33 commands_select=`mktemp commands_select.XXXXXX` 34 # 负责记录剪刀石头布的玩家出拳 35 stonegame_select=`mktemp stonegame_select.XXXXXX` 36 # 负责记录计算器的选择 37 calculator_select=`mktemp calculator_select.XXXXXX` 38 39 # 负责记录计算数字 40 number=`mktemp number.XXXXXX` 41 42 # 打印常用的shell命令的代码块-开始 43 function commands_menu { 44 # 该函数负责打印类别的选择,一共8大类 45 # 通过dialog的menu选择需要打印的shell命令 46 dialog --title "常用shell命令"\ 47 --menu "请您选择需要查看的手册" 11 44 10\ 48 1 "文件、目录操作命令"\ 49 2 "查看文件内容命令"\ 50 3 "基本系统命令"\ 51 4 "监视系统状态命令"\ 52 5 "磁盘操作命令"\ 53 6 "用户和组相关命令"\ 54 7 "压缩命令"\ 55 8 "网络相关命令" 2> $commands_select # 重定向覆盖 56 } 57 58 function commands_endtxt { 59 # 该函数负责退出打印手册的信息 60 # 使用dialog的msgbox实现 61 dialog --title "常用shell命令"\ 62 --msgbox " \n\n\n手册查询结束,感谢您的使用!"\ 63 11 44 64 } 65 66 function commands_out { 67 # 该函数负责打印shell手册 68 # 使用dialog的textbox输出选择的shell命令手册 69 # 每一类都放在shell1~8.txt文件中 70 n=`cat $commands_select` # 读取在commands_menu选择的值 71 dialog --title "常用shell命令"\ 72 --textbox shell$n.txt 20 50 73 # 输出储存在shelln.txt文件中的shell,n为类别号 74 } 75 76 function shell_commands { 77 # 该函数为打印常见shell命令的功能入口 78 while [[ 1 ]]; do 79 commands_menu 80 # 若在commands_menu中选择取消, 81 # 则会返回1值,此时退出打印功能,并提醒用户 82 if [[ $? -eq 1 ]]; then 83 commands_endtxt 84 break 85 fi 86 commands_out 87 done 88 } 89 # 打印常用的shell命令的代码块-结束 90 91 # 石头剪刀布的代码块-开始 92 function stonegame_menu { 93 # 该函数负责游戏主菜单 94 # 使用dialog的menu进行出拳选择 95 dialog --title "石头剪刀布"\ 96 --menu "请您出拳:" 11 44 10\ 97 1 "石头"\ 98 2 "剪刀"\ 99 3 "布" 2> $stonegame_select #选择结果重定向 100 } 101 102 function stonegame_endtxt { 103 # 该函数负责游戏结束信息提醒 104 # 使用dialog的msgbox进行信息输出 105 dialog --title "石头剪刀布"\ 106 --msgbox " \n\n\n游戏结束,感谢您的使用!"\ 107 11 44 108 } 109 110 function stonegame_play { 111 # 该函数负责游戏的输赢逻辑判断 112 # 接受3个参数,$1为玩家出拳信息,$2为电脑 113 # $3为游戏得分 114 card_lib=("石头" "剪刀" "布") 115 # 重定向覆盖游戏信息 116 echo "您出${card_lib[$1-1]}" > gametxt 117 # 重定向追加 118 echo "电脑出${card_lib[$2-1]}" >> gametxt 119 # 逻辑判断 120 # 石头为1, 遇到剪刀2才能赢,$3为 1 - 2 = -1 121 # 遇到布3输,$3为 1 - 3 = -2, 122 # 同理推出输赢表 $1 $2 $3 游戏结果 123 # 1 1 0 平局 2 1 1 电脑赢 3 1 2 玩家赢 124 # 1 2 -1 玩家赢 2 2 0 平局 3 2 1 电脑赢 125 # 1 3 -2 电脑赢 2 3 -1 玩家赢 3 3 0 平局 126 case $3 in 127 -1 | 2 ) 128 echo "您赢了" >> gametxt;; 129 1 | -2 ) 130 echo "电脑赢了" >> gametxt;; 131 0 ) 132 echo "平局" >> gametxt;; 133 esac 134 } 135 136 function stonegame_out { 137 # 该函数负责输出游戏结果 138 dialog --title "石头剪刀布"\ 139 --textbox gametxt 11 44 140 } 141 142 function shell_stonegame { 143 # 该函数为石头剪刀布游戏入口 144 # 调用函数完成功能 145 while [[ 1 ]]; do 146 clear 147 stonegame_menu 148 # 如果在stonegame_menu函数中选择取消, 149 # 则dialog会返回1,视为退出游戏 150 if [[ $? -eq 1 ]]; then 151 stonegame_endtxt 152 break 153 fi 154 # 读取stonegame_menu函数选择数值,生成玩家的出拳 155 player=`cat $stonegame_select` 156 # 产生1~3的随机数,模拟电脑出拳 157 computer=$[RANDOM%3+1] 158 # score判断计分 159 score=$[$player-$computer] 160 stonegame_play $player $computer $score 161 stonegame_out 162 done 163 } 164 # 石头剪刀布的代码块-结束 165 166 # 加减计算器的代码块-开始 167 # 加减计算器的菜单 168 function calculator_menu { 169 dialog --title "加减乘除计算器"\ 170 --menu "请您填充好数据与运算符,再进行计算" 11 44 10\ 171 1 "操作数1"\ 172 2 "运算符"\ 173 3 "操作数2"\ 174 4 "计算结果" 2> $calculator_select 175 } 176 177 # 结束信息提醒 178 function calculator_endtxt { 179 dialog --title "加减乘除计算器"\ 180 --msgbox " \n\n\n计算器已成功关闭" 11 44 181 } 182 183 # 数字初始化 184 function scanner_number { 185 dialog --title "加减乘除计算器"\ 186 --inputbox "请输入一个数"\ 187 11 44 2> $number # 188 num=`cat $number` 189 if [[ $num =~ ^([0-9]*|d*.d{1}?d*)$ ]]; then 190 case $1 in 191 1 ) 192 echo "$num" > calculator_number1;; 193 2 ) 194 echo "$num" > calculator_number2;; 195 esac 196 else 197 dialog --title "加减乘除计算器"\ 198 --msgbox " \n\n\n您输出的不是数字" 11 44 199 fi 200 } 201 202 # 选择运算符 203 function scanner_operator { 204 dialog --title "加减乘除计算器"\ 205 --menu "请选择运算符" 11 44 10\ 206 1 "加号 +"\ 207 2 "减号 -"\ 208 3 "乘号 ×"\ 209 4 "除号 /" 2> calculator_operator 210 } 211 212 # 计算器运行 213 function run { 214 clib=('+' '-' 'x' '/') 215 number1=`cat calculator_number1` 216 number2=`cat calculator_number2` 217 operator=`cat calculator_operator` 218 echo "$number1 ${clib[operator-1]} $number2 的结果为:" > numtxt 219 case $operator in 220 1 ) 221 echo "scale=2;$number1+$number2" | bc >> numtxt;; 222 2 ) 223 echo "scale=2;$number1-$number2" | bc >> numtxt;; 224 3 ) 225 echo "scale=2;$number1*$number2" | bc >> numtxt;; 226 4 ) 227 echo "scale=2;$number1/$number2" | bc >> numtxt;; 228 esac 229 dialog --title "加减乘除计算器"\ 230 --textbox numtxt 11 44 231 } 232 233 # 数据初始化 234 function calculator_init { 235 selection=`cat $calculator_select` 236 case $selection in 237 1 ) 238 scanner_number 1;; 239 2 ) 240 scanner_operator;; 241 3 ) 242 scanner_number 2;; 243 4 ) 244 run;; 245 esac 246 } 247 248 function shell_calculator { 249 #该函数为计算器入口 250 echo "0" > calculator_number1 251 echo "0" > calculator_number2 252 echo "1" > calculator_operator 253 while [[ 1 ]]; do 254 clear 255 calculator_menu 256 if [[ $? -eq 1 ]]; then 257 calculator_endtxt 258 break 259 fi 260 calculator_init 261 done 262 } 263 # 加减乘除计算器的代码块-结束 264 265 # 主程序菜单 266 function mian_menu { 267 dialog --title "综合应用脚本程序"\ 268 --menu "请选择功能:" 10 44 10\ 269 1 "打印shell命令"\ 270 2 "石头剪刀布游戏"\ 271 3 "加减乘除计算器" 2> $mian_select 272 } 273 274 # 主要的运行 275 mainRunopen=1 276 while [[ $mainRunopen -eq 1 ]]; do 277 clear 278 mian_menu 279 MS=`cat $mian_select` 280 case $MS in 281 1) 282 shell_commands;; 283 2) 284 shell_stonegame;; 285 3) 286 shell_calculator;; 287 *) 288 dialog --msgbox " \n\n\n退出成功,感谢您的使用!"\ 289 11 44 290 mainRunopen=0 291 break;; 292 esac 293 done 294 295 # rm -f $ 2> /dev/null 296 rm -f $mian_select 2> /dev/null 297 rm -f $commands_select 2> /dev/null 298 rm -f $stonegame_select 2> /dev/null 299 rm -f $calculator_select 2> /dev/null 300 rm -f gametxt 2> /dev/null 301 rm -f $number 2> /dev/null 302 rm -f calculator_number1 2> /dev/null 303 rm -f calculator_number2 2> /dev/null 304 rm -f calculator_operator 2> /dev/null 305 rm -f numtxt 2> /dev/null 306 # 确保退出时执行所有清理操作 307 exit 0
标签:Shell,课设,--,calculator,echo,课程,dialog,shell,select From: https://www.cnblogs.com/itsallcode/p/17827358.html