1.原因
之前写了Windows的cmd脚本用来保存报告文件:
@echo off cd cd ./curl/bin set /p exampleUrlHost=请输入服务的IP地址: set /p exampleUrlPort=请输入服务的端口: :start echo **********************报告保存脚本********************** echo 根据以下提示执行 echo 0 退出 echo 1 保存年度报告 echo 2 保存月度报告 echo 3 保存当天报告 set /p exampleUrlIndex=请输入要保存的结果序号: if %exampleUrlIndex% == 1 ( set exampleUrlPath=/example/exampleYear ) if %exampleUrlIndex% == 2 ( set exampleUrlPath=/example/exampleMonth ) if %exampleUrlIndex% == 3 ( set exampleUrlPath=/example/exampleDay ) if %exampleUrlIndex% == 0 ( exit ) echo 正在保存... curl http://%exampleUrlHost%:%exampleUrlPort%%exampleUrlPath% echo 保存完成。 goto start
但是有时候服务仅在Linux环境上进行部署,所以要写一个shell脚本进行报告的保存。
2.Shell脚本
2.1 初始版本
简单的参数判断,这里只给出一个分支,脚本save.sh内容如下:
#!/bin/bash if [ $1 == 1 ]; then echo 正在保存年度报告... curl http://exampleUrlHost:exampleUrlPort/example/exampleYear echo 保存完成。 else echo "脚本请带参数" echo "1 保存年度报告" fi
此时如果执行脚本时没有携带参数,将会报错:
./save.sh: line 2: [: ==: unary operator expected
这个脚本的问题很多exampleUrlHost和exampleUrlPort
都是固定的,有些时候需要修改后才能正确执行。
2.2 交互式 case 脚本
#!/bin/bash echo "请输入服务的IP地址:" read exampleUrlHost echo "请输入服务的端口号:" read exampleUrlPort echo "请选择您的操作:" echo "1 保存年度报告" echo "2 保存月度报告" echo "3 保存当天报告" echo "4 退出" read choice case $choice in 1) echo 正在保存年度报告... curl http://$exampleUrlHost:$exampleUrlPort/example/exampleYear echo 保存完成。 ;; 2) echo 正在保存月度报告... curl http://$exampleUrlHost:$exampleUrlPort/example/exampleMonth echo 保存完成。 ;; 3) echo 正在保存当天报告... curl http://$exampleUrlHost:$exampleUrlPort/example/exampleDay echo 保存完成。 ;; 4) exit 0 ;; *) echo "无效的选项!" ;; esac
这个版本不仅不报错,似乎体验还是可以的,但是想导出多个报告就要多次输入IP和端口号,比较麻烦。
2.3 最终 while case 版
#!/bin/bash echo "请输入服务的IP地址:" read exampleUrlHost echo "请输入服务的端口号:" read exampleUrlPort while true; do echo "请选择您的操作:" echo "1 保存年度报告" echo "2 保存月度报告" echo "3 保存当天报告" echo "4 退出" read choice case $choice in 1) echo 正在保存年度报告... curl http://$exampleUrlHost:$exampleUrlPort/example/exampleYear echo 保存完成。 ;; 2) echo 正在保存月度报告... curl http://$exampleUrlHost:$exampleUrlPort/example/exampleMonth echo 保存完成。 ;; 3) echo 正在保存当天报告... curl http://$exampleUrlHost:$exampleUrlPort/example/exampleDay echo 保存完成。 ;; 4) break ;; *) echo "无效的选项!" ;; esac done
3.总结
简单的版本也是可以实现功能的,但是执行前要进行脚本的调整。