├── README.md ├── conf └── log.txt ├── lib ├── process.sh ├── system.sh └── test.sh ├── material ├── CFrontendSetup.php ├── ifbook.go ├── man-jenkins ├── man-kafka ├── man-kafka-manager ├── man-mindoc ├── man-mysql ├── man-nginx ├── man-php ├── man-redis ├── man-redis-browser ├── man-redis1 ├── man-tomcat ├── nginx.conf ├── redis_7000.conf ├── redis_browser.yml └── server.properties ├── package ├── c.png └── d.png ├── script ├── ant-1.9.sh ├── apr-1.6.sh ├── apr-util-1.6.sh ├── batch.sh ├── bidfree.sh ├── calibre.sh ├── card-life.sh ├── chinese-font.sh ├── clocks.sh ├── dos2.sh ├── glibc-2.14.sh ├── golang.sh ├── gradle.sh ├── hit-boss.sh ├── http_load.sh ├── httpd-2.4.sh ├── ip-location.sh ├── jdk-1.7.sh ├── jdk-1.8.sh ├── jenkins-2.75.sh ├── jenkins.sh ├── kafka-2.12.sh ├── kafka-cluster.sh ├── kafka-manager.sh ├── lamp-yum.sh ├── logcut.sh ├── maven-3.5.sh ├── mindoc.sh ├── moni-tty.sh ├── mysql-5.6.sh ├── mysql-5.7.sh ├── nginx-1.8.sh ├── nodejs-12.16.sh ├── nodejs-8.9.sh ├── nvm.sh ├── openssl.sh ├── pcre-8.sh ├── php-5.6.sh ├── php-7.1.sh ├── python-3.6.sh ├── redis-3.2.sh ├── redis-browser.sh ├── redis-cluster.sh ├── redis-port.sh ├── ruby-2.4.sh ├── rvm.sh ├── sbt.sh ├── siege.sh ├── sqlite-3.23.sh ├── sys-mes.sh ├── tanke.sh ├── tetris.sh ├── tijiao-git.sh ├── tomcat-8.5.sh ├── zabbix-3.4.sh ├── zabbix-open.sh ├── zk-cluster.sh └── zookeeper-3.5.sh └── ssc.sh /README.md: -------------------------------------------------------------------------------- 1 | ### 一.简介 2 | 3 | ssc是shell的服务部署小框架,内涵大量函数,按照例子编写,将可以定制化安装各种服务 4 | 5 | 支持中英文双语,当前默认中文 6 | 7 | 内涵大量例子,可一键部署LNMP、Redis集群、Python3、maven等服务 8 | 9 | 拥有大量检测,可以用于生产环境(当前未测试完全)使用,当中途报错,解决后可再次执行,不会覆盖操作 10 | 11 | 支持自定义安装目录,可以搭配ansible或者其他批量操作工具,部署redis,zookeeper等一系列集群 12 | 13 | **用于生产前请到测试环境进行测试,百密还有一疏呢! QQ交流群:762696893** 14 | 15 | ### 二.如何下载ssc! 16 | 17 | 安装最新版本: 18 | 19 | `yum -y install git` 20 | 21 | `git clone https://github.com/goodboy23/shell-script-collection` 22 | 23 | `cd shell-script-collection` 24 | 25 | `./ssc.sh` 26 | 27 | [其它版本下载地址](https://github.com/goodboy23/shell-script-collection/releases "其它版本下载地址") 28 | 29 | ### 三.ssc使用例子 30 | 31 | #### 安装某个服务 32 | 33 | 查看是否有你想要的服务 34 | 35 | `./ssc.sh` 36 | 37 | 安装mysql-5.6 38 | 39 | `./ssc.sh install mysql-5.6` 40 | 41 | ### 查看帮助 42 | 43 | `./ssc.sh` 44 | 45 | ![](http://52wiki.oss-cn-beijing.aliyuncs.com/doc/0f37d3b8a541a4f4a83b226bad42d90e66cb58b9.png) 46 | 47 | ### 查看列表 48 | 49 | `./ssc.sh list` 50 | 51 | ![](http://52wiki.oss-cn-beijing.aliyuncs.com/doc/67ad2f3b5c713937f4bc218322f6792e282c6d3d.png) 52 | 53 | ### 四.如何参与本项目? 54 | 直接修改再提交即可,也可以加qq1969679546,一起讨论。 55 | 56 | ### 五.默认安装的服务是1.6版本,我怎么换成1.7的? 57 | 例如,默认脚本安装的是1.6版本的nginx,但是你需要1.7版本的。将nginx安装包复制到package文件夹中 58 | 59 | 再使用./ssc.sh edit nginx 将 script_get 函数中网址部分替换为安装包名,md5部分替换为相应md5值 60 | 61 | ### 六.这些目录和文件都是干什么的? 62 | conf #存放脚本的简略信息 63 | 64 | lib #shell函数文件 65 | 66 | material #存放脚本用到的配置文件或者txt文件 67 | 68 | package #存放一键安装脚本用到的安装包 69 | 70 | script #存放脚本文件 71 | 72 | README.md #说明书 73 | 74 | ssc.sh #管理脚本,管理其它脚本 75 | 76 | ### 七.如何添加一个新的脚本到合集中? 77 | 如果你想将你自己的一键安装脚本添加进来,可以仿照script/mysql.sh,如果想将备份脚本这种常用命令型脚本添加进来,可以仿照script/batch.sh。 78 | 79 | 其中用了大量test_exit等函数,可以从lib文件夹中查看函数具体用法 80 | 81 | 添加完成后,rm -rf conf/list*,删除存在的脚本列表 82 | 83 | ./ssc.sh list,生产新的脚本列表,使用./ssc.sh list 脚本名,来查看脚本是否被添加进去了 84 | -------------------------------------------------------------------------------- /conf/log.txt: -------------------------------------------------------------------------------- 1 | 1 2 | 占位符 3 | -------------------------------------------------------------------------------- /lib/process.sh: -------------------------------------------------------------------------------- 1 | #字符串处理系列 process 2 | 3 | 4 | 5 | #从位置变量中找出是数字的部分 6 | process_number() { 7 | local a=() b=0 c d i 8 | 9 | for i in `echo $@` 10 | do 11 | c=`echo ${i%%.*}` 12 | d=`echo ${i#*.}` 13 | 14 | if [[ $d == $c ]];then 15 | [[ $c -gt 0 ]] &> /dev/null && a[$b]=$i && let b++ && continue 16 | else 17 | [[ $c -gt 0 ]] &> /dev/null && [[ $d -gt 0 ]] &> /dev/null && a[$b]=$i && let b++ 18 | fi 19 | done 20 | 21 | echo "${a[*]}" 22 | } 23 | 24 | #从位置变量中找出整数部分 25 | process_integer() { 26 | local a=() i 27 | 28 | for i in `echo $@` 29 | do 30 | [[ $i -gt 0 ]] &> /dev/null && a[$b]=$i 31 | done 32 | 33 | echo "${a[*]}" 34 | } 35 | 36 | #从位置变量中挑出最小值 37 | process_small(){ 38 | echo "$@" | tr " " "\n" | sort -V | head -n 1 39 | } 40 | 41 | #从位置变量中挑出最大值 42 | process_big() { 43 | echo "$@" | tr " " "\n" | sort -rV | head -n 1 44 | } 45 | 46 | #把$1汉字转成encode格式 47 | process_encode() { 48 | echo $1 | tr -d "\n" | xxd -i | sed -e "s/ 0x/%/g" | tr -d " ,\n" 49 | } 50 | 51 | #测试输入的是否为ip,$1填写ip 52 | process_ip() { 53 | local status=$(echo $1|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}') 54 | if echo $1|grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$">/dev/null; 55 | then 56 | if [ status == "yes" ]; then 57 | return 0 58 | else 59 | return 1 60 | fi 61 | else 62 | return 1 63 | fi 64 | } 65 | 66 | #将位置变量中的汉语变成英语,不支持标点符号 67 | process_en_cn() { 68 | local a="" i 69 | 70 | for i in `echo $@` 71 | do 72 | [ "$i" == "$1" ] && a=$1 &&continue 73 | a="$a+$i" 74 | done 75 | 76 | curl -s http://dict.baidu.com/s?wd=${a} | egrep -o "]*>" | sed -n '5p' | awk -F'=' '{print $3}' | awk -F'"' '{print $1}' 77 | } 78 | 79 | #转换大小写,$1为字符串,$2为1则大转小,为2则小转大,默认1 80 | process_capital() { 81 | local a=1 82 | [ ! $a ] && a=1 || c=$2 83 | 84 | if [ $a -eq 1 ];then 85 | echo $1 | tr "[A-Z]" "[a-z]" 86 | elif [ $a -eq 2 ];then 87 | echo $1 | tr "[a-z]" "[A-Z]" 88 | else 89 | return 1 90 | fi 91 | } 92 | 93 | #返回一个随机端口号 94 | process_port() { 95 | shuf -i 9000-19999 -n 1 96 | } 97 | 98 | #随机密码,位置变量1可指定密码长度,默认6位 99 | process_passwd(){ 100 | local a=0 b="" c=6 101 | [ ! $1 ] && c=6 || c=$1 102 | 103 | for i in {a..z}; do arr[a]=${i}; a=`expr ${a} + 1`; done 104 | for i in {A..Z}; do arr[a]=${i}; a=`expr ${a} + 1`; done 105 | for i in {0..9}; do arr[a]=${i}; a=`expr ${a} + 1`; done 106 | for i in `seq 1 $c`; do b="$b${arr[$RANDOM%$a]}"; done 107 | echo ${b} 108 | } 109 | 110 | #一排横线,$1可指定长度,默认70 111 | process_line() { 112 | local a=70 113 | [ ! $1 ] || a=$1 114 | 115 | printf "%-${a}s\n" "-" | sed 's/\s/-/g' 116 | } 117 | 118 | #倒计时,3秒 119 | process_time() { 120 | local i 121 | for i in {3..1} 122 | do 123 | echo $i 124 | sleep 1 125 | done 126 | } 127 | 128 | #等待,打任意字结束,ctl+c将退出脚本 129 | process_char(){ 130 | SAVEDSTTY=`stty -g` 131 | stty -echo 132 | stty cbreak 133 | dd if=/dev/tty bs=1 count=1 2> /dev/null 134 | stty -raw 135 | stty echo 136 | stty $SAVEDSTTY 137 | } 138 | 139 | #$1为字符,会将字符中的-变成_ 140 | process_bian() { 141 | local a="" i b 142 | 143 | for i in `seq 1 ${#1}` 144 | do 145 | b=`echo $1 | cut -c $i` 146 | [ "$b" == "-" ] && a=`echo ${a}_` || a=`echo ${a}${b}` 147 | done 148 | 149 | echo $a 150 | } 151 | 152 | #集群使用,根据本地ip算出id号,统一cluster_ip,返回他在数组第几号 153 | process_id() { 154 | local num=`echo ${#cluster_ip[*]}` id a=1 i e 155 | let num-- 156 | 157 | for i in `ip addr | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | egrep -v "^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-2]\.|^10\.|^127\.|^255\.|^0\."` 158 | do 159 | [ $a -eq 0 ] && break 160 | for e in `seq 0 $num` 161 | do 162 | echo ${cluster_ip[$e]} | grep $i &> /dev/null 163 | if [ $? -eq 0 ];then 164 | id=$e 165 | a=0 166 | break 167 | fi 168 | done 169 | done 170 | 171 | let id++ 172 | echo $id 173 | } 174 | 175 | #集群使用,根据本地ip算出当前绑定ip,统一cluster_ip,返回绑定ip 176 | process_ip() { 177 | local num=`echo ${#cluster_ip[*]}` ip a=1 i e 178 | let num-- 179 | 180 | for i in `ip addr | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | egrep -v "^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-2]\.|^10\.|^127\.|^255\.|^0\."` 181 | do 182 | [ $a -eq 0 ] && break 183 | for e in `seq 0 $num` 184 | do 185 | echo ${cluster_ip[$e]} | grep $i &> /dev/null 186 | if [ $? -eq 0 ];then 187 | ip=$i 188 | a=0 189 | break 190 | fi 191 | done 192 | done 193 | echo $ip 194 | } 195 | -------------------------------------------------------------------------------- /lib/system.sh: -------------------------------------------------------------------------------- 1 | #system组 系统,返回各种系统信息 2 | 3 | 4 | 5 | #系统和版本 6 | system_version_two() { 7 | [ -f /etc/redhat-release ] && awk '{print ($1,$3~/^[0-9]/?$3:$4)}' /etc/redhat-release && return 8 | [ -f /etc/os-release ] && awk -F'[= "]' '/PRETTY_NAME/{print $3,$4,$5}' /etc/os-release && return 9 | [ -f /etc/lsb-release ] && awk -F'[="]+' '/DESCRIPTION/{print $2}' /etc/lsb-release && return 10 | } 11 | 12 | #系统版本号 13 | system_vrsion(){ 14 | if [[ -s /etc/redhat-release ]];then 15 | grep -oE "[0-9.]+" /etc/redhat-release 16 | else 17 | grep -oE "[0-9.]+" /etc/issue 18 | fi 19 | } 20 | 21 | #系统是64位则返回0 22 | systemctl_64bit(){ 23 | if [ `getconf WORD_BIT` = '32' ] && [ `getconf LONG_BIT` = '64' ] ; then 24 | return 0 25 | else 26 | return 1 27 | fi 28 | } 29 | 30 | #返回一个外网ipv4 31 | system_ipv4() { 32 | wget -qO- -t1 -T2 ipv4.icanhazip.com 33 | } 34 | 35 | #如果本地ip为私有地址,将返回公有地址 36 | system_ipv4_two() { 37 | local IP=$( ip addr | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | egrep -v "^192\.168|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-2]\.|^10\.|^127\.|^255\.|^0\." | head -n 1 ) 38 | [ -z ${IP} ] && IP=$( wget -qO- -t1 -T2 ipv4.icanhazip.com ) 39 | [ -z ${IP} ] && IP=$( wget -qO- -t1 -T2 ipinfo.io/ip ) 40 | [ ! -z ${IP} ] && echo ${IP} || echo 41 | } 42 | 43 | #一个外网ipv6地址 44 | system_ipv6(){ 45 | wget -qO- -t1 -T2 ipv6.icanhazip.com 46 | } 47 | 48 | #$1为ip,根据输入ip返回所在地 49 | system_location() { 50 | curl -s "http://ip138.com/ips138.asp?ip=${1}&action=2"| iconv -f gb2312 -t utf-8|grep '