写shell工具类,一个常用实例
简述:
当我们常用到某些指令时,我们就需要将这个命令进行封装。封装的设计和扩展,因人而异。但为了每个人都能够了解到这个命令,常需要写出这个类的help。
关键字:
函数、getopts
函数
通过自定义函数(可参阅:http://www.runoob.com/linux/linux-shell-func.html),能够实现过程操作、输入捕获(read)、输出获取(return)。
getopts
为了获取用户在命令下的参数,通过该命令来操作(可参阅:https://blog.csdn.net/xluren/article/details/17489667)。
用法:getopts option_string variable ,第一个参数option_string :命令参数的集合;第二个参数variable:输入的参数
对于参数集合,选项之间可以通过冒号“:”进行分隔,也可以直接相连接。如果参数前有“:”则表示选项后面必须带有值(可通过OPTARG获取),如果没有可以不加实际值进行传递
cat
cat << EOF *** EOF 能够将***打印出来
实例:
1 #!/bin/bash 2 3 usage() { 4 cat <<EOF 5 usage: $0 options 6 7 OPTIONS: 8 -d 项目 9 -v 版本 10 -p 端口 11 EOF 12 } 13 14 while getopts "hd:v:p:" OPTION 15 do 16 case $OPTION in 17 h) usage; exit 1 ;; 18 d) project=$OPTARG ;; 19 v) version=$OPTARG ;; 20 p) port=$OPTARG ;; 21 ?) usage; exit 1 22 esac 23 done 24 25 if [[ -z ${project} || -z ${version} || -z ${version} ]]; then 26 echo "必须指定项目,版本,端口" 27 exit 1 28 fi 29 30 cd `dirname $0` 31 32 cd ../${project} 33 34 mkdir -p logs 35 if [[ -f logs/${project}.log ]]; then 36 pid=`lsof logs/${project}.log |tail -1 |awk '{print $2}'` 37 if [[ -n "$pid" ]]; then 38 echo "杀掉当前进程: $pid" 39 kill $pid 40 fi 41 else 42 echo "找不到logs/${project}.log" 43 fi