File tree 5 files changed +192
-1
lines changed
5 files changed +192
-1
lines changed Original file line number Diff line number Diff line change
1
+ --
2
+ -- Created by IntelliJ IDEA.
3
+ -- User: Administrator
4
+ -- Date: 2017/6/6
5
+ -- Time: 8:57
6
+ -- To change this template use File | Settings | File Templates.
7
+ --
8
+ -- 在 Lua 5.1 语言中,元表 (metatable) 的表现行为类似于 C++ 语言中的操作符重载,例如我们可以重载 "__add" 元方法 (metamethod),来计算两个 Lua 数组的并集;或者重载 "__index" 方法,来定义我们自己的 Hash 函数。Lua 提供了两个十分重要的用来处理元表的方法,如下:
9
+ -- setmetatable(table, metatable):此方法用于为一个表设置元表。
10
+ -- getmetatable(table):此方法用于获取表的元表对象
11
+
12
+ ---- -------------------------------------------------- 通过重载 "__add" 元方法来计算集合的并集实例:
13
+ local set1 = {10 ,20 ,30 }
14
+ local set2 = {40 ,50 ,60 }
15
+ -- 将用于重载__add的函数,注意第一个参数是self
16
+ local union = function (self , another )
17
+ local set = {}
18
+ local result = {}
19
+
20
+ -- 利用数组来确保集合的互异性
21
+ for i , j in pairs (self ) do set [j ] = true end
22
+ for i , j in pairs (another ) do set [j ] = true end
23
+
24
+ -- 加入结果集合
25
+ for i , j in pairs (set ) do table.insert (result , i ) end
26
+ return result
27
+ end
28
+ setmetatable (set1 , {__add = union }) -- 重载 set1 表的 __add 元方法
29
+
30
+ local set3 = set1 + set2
31
+ for _ , j in pairs (set3 ) do
32
+ io.write (j .. " " ) -- >output:30 50 20 40 10
33
+ end
Original file line number Diff line number Diff line change
1
+ ## SHELL脚本
2
+ + [ 如何不耍流氓的做运维之-SHELL脚本] ( http://mp.weixin.qq.com/s/aI3ha5BvzIvqpn2ddAK5zQ )
3
+ + [ 已经测试成功自动备份和自动压缩备份数据库文件] ( https://github.com/Tinywan/Lua-Nginx-Redis/blob/master/Nginx-Rtmp/slimp_backup_db.sh )
4
+ ## SHELL脚本小技巧
5
+ ``` bash
6
+ #! /bin/bash
7
+ # ######################################################
8
+ # $Name: shell_template.sh
9
+ # $Version: v1.0
10
+ # $Function: Backup MySQL Databases Template Script
11
+ # $Author: Jason Zhao
12
+ # $organization: https://www.unixhot.com/
13
+ # $Create Date: 2016-08-27
14
+ # $Description: You know what i mean,hehe
15
+ # ######################################################
16
+
17
+ # Shell Env
18
+ SHELL_NAME=" shell_template.sh"
19
+ SHELL_DIR=" /opt/shell"
20
+ SHELL_LOG=" ${SHELL_DIR} /${SHELL_NAME} .log"
21
+ LOCK_FILE=" /tmp/${SHELL_NAME} .lock"
22
+
23
+ # Write Log
24
+ shell_log (){
25
+ LOG_INFO=$1
26
+ echo " $( date " +%Y-%m-%d" ) $( date " +%H-%M-%S" ) : ${SHELL_NAME} : ${LOG_INFO} " >> ${SHELL_LOG}
27
+ }
28
+
29
+ # Shell Usage shell_usage函数,用来告诉用户,这个脚本的使用方法
30
+ shell_usage (){
31
+ echo $" Usage: $0 {backup}"
32
+ }
33
+
34
+ # 函数shell_lock和shell_unlock非常简单,就是创建一个锁文件
35
+ shell_lock (){
36
+ touch ${LOCK_FILE}
37
+ }
38
+
39
+ shell_unlock (){
40
+ rm -f ${LOCK_FILE}
41
+ }
42
+
43
+ # Backup MySQL All Database with mysqldump or innobackupex
44
+ mysql_backup (){
45
+ if [ -f " $LOCK_FILE " ]; then
46
+ shell_log " ${SHELL_NAME} is running"
47
+ echo " ${SHELL_NAME} " is running && exit
48
+ fi
49
+ shell_log " mysql backup start"
50
+ shell_lock
51
+ sleep 10
52
+ shell_log " mysql backup stop"
53
+ shell_unlock
54
+ }
55
+
56
+ # Main Function
57
+ main (){
58
+ case $1 in
59
+ backup)
60
+ mysql_backup
61
+ ;;
62
+ * )
63
+ shell_usage;
64
+ esac
65
+ }
66
+
67
+ # Exec
68
+ main $1
69
+ ` ` `
Original file line number Diff line number Diff line change
1
+ #! /bin/bash
2
+ # ######################################################
3
+ # $Name: shell_template.sh
4
+ # $Version: v1.0
5
+ # $Function: Backup MySQL Databases Script
6
+ # $Author: ShaoBo Wan
7
+ # $organization: https://github.com/Tinywan
8
+ # $Create Date: 2017-06-27
9
+ # $Description: 定期备份MySQL数据库
10
+ # ######################################################
11
+
12
+ # Shell Env
13
+ SHELL_NAME=" backup_db.sh"
14
+ SHELL_DIR=" /home/www/database_back"
15
+ SHELL_LOG=" ${SHELL_DIR} /${SHELL_NAME} .log"
16
+ LOCK_FILE=" /tmp/${SHELL_NAME} .lock"
17
+ BACKUP_NAME=" ${SHELL_DIR} /${SHELL_NAME} .log"
18
+
19
+ # Write Log
20
+ shell_log (){
21
+ LOG_INFO=$1
22
+ echo " $( date " +%Y-%m-%d" ) $( date " +%H-%M-%S" ) : ${SHELL_NAME} : ${LOG_INFO} " >> ${SHELL_LOG}
23
+ }
24
+
25
+ # Shell Usage shell_usage函数,用来告诉用户,这个脚本的使用方法
26
+ shell_usage (){
27
+ echo $" Usage: $0 {backup}"
28
+ }
29
+
30
+ # 函数shell_lock和shell_unlock非常简单,就是创建一个锁文件
31
+ shell_lock (){
32
+ touch ${LOCK_FILE}
33
+ }
34
+
35
+ shell_unlock (){
36
+ rm -f ${LOCK_FILE}
37
+ }
38
+
39
+ # Backup MySQL All Database with mysqldump or innobackupex
40
+ mysql_backup (){
41
+ if [ -f " $LOCK_FILE " ]; then
42
+ shell_log " ${SHELL_NAME} is running"
43
+ echo " ${SHELL_NAME} " is running && exit
44
+ fi
45
+ shell_log " mysql backup start"
46
+ shell_lock
47
+ sleep 10
48
+ shell_log " mysql backup stop"
49
+ shell_unlock
50
+ }
51
+
52
+ # Main Function
53
+ main (){
54
+ case $1 in
55
+ backup)
56
+ mysql_backup
57
+ ;;
58
+ * )
59
+ shell_usage;
60
+ esac
61
+ }
62
+
63
+ # Exec
64
+ main $1
Original file line number Diff line number Diff line change
1
+ #! /bin/bash
2
+ # This is mysql mysqldaiybak scripts
3
+ # 2015-05-01
4
+ database=weblive
5
+ databak_dir=/home/www/database_back
6
+ logs_dir=/home/www/database_back/logs
7
+ dumpbin=/usr/bin/mysqldump
8
+
9
+ DATE=$( date +%Y%m%d)
10
+ date_time=$( date +" %y-%m-%d %H:%M:%S" )
11
+ backup_name=sansan_bak1_${DATE} .sql
12
+ logFile=$logs_dir /sansan_${DATE} .log
13
+
14
+ echo " " > $logFile
15
+ echo " -------------$( date +" %y-%m-%d %H:%M:%S" ) backup start ----------------------" >> $logFile
16
+
17
+ $dumpbin $database > $databak_dir /$backup_name
18
+ /bin/bzip2 $backup_name
19
+ cd $databak_dir
20
+ # 1 mouth = 44640 min
21
+ find ./ -mindepth 1 -maxdepth 3 -type f -name * .bz2 -mmin +43200 | xargs rm -rf
22
+ find ./ -mindepth 1 -maxdepth 3 -type f -name * .sql -mmin +1440 | xargs rm -rf
23
+ echo " -------------$( date +" %y-%m-%d %H:%M:%S" ) backup end ----------------------" >> $logFile
Original file line number Diff line number Diff line change 10
10
- [x] 编写快速安全Bash脚本的建议
11
11
- [x] Shell脚本实现分日志级别记录日志
12
12
- [x] Nginx日志定时备份和删除
13
+ - [x] SHELL脚本小技巧
13
14
+ [ Lua基础知识] ( #Lua_base_knowledge )
14
15
+ [ Lua 基础语法] ( #Lua-base )
15
16
+ [ luajit 执行文件默认安装路径] ( #Nginx_base_knowledge )
117
118
+ [编写快速安全Bash脚本的建议](https://github.com/Tinywan/Lua-Nginx-Redis/blob/master/Shell/write-shell-suggestions.md)
118
119
+ [shell脚本实现分日志级别记录日志](https://github.com/Tinywan/Lua-Nginx-Redis/blob/master/Nginx-Rtmp/Shell_Log.sh)
119
120
+ [Nginx日志定时备份和删除](https://github.com/Tinywan/Lua-Nginx-Redis/blob/master/Nginx-Rtmp/Shell_Nginx_Log_cut.sh)
121
+ + [SHELL脚本小技巧](https://github.com/Tinywan/Lua-Nginx-Redis/blob/master/Nginx-Rtmp/Shell_script.md)
120
122
# # <a name="Lua_base_knowledge"/> Lua基础知识
121
123
# ### Lua 基础语法 <a name="Lua-base"/>
122
124
+ 删除一个全局变量,只要将变量值赋值为nil:` a = nil` ,当且仅当一个变量不为nil 时,这个变量存在
523
525
524
526
local t1 = {}
525
527
local t2 = {}
526
- local mt = { __index = smartMan } -- __index 可以是一个函数 ,也可以是一个函数
528
+ local mt = { __index = smartMan } -- __index 可以是一个表 ,也可以是一个函数
527
529
setmetatable(t1, mt)
528
530
setmetatable(t2, mt)
529
531
print(t1.money)
You can’t perform that action at this time.
0 commit comments