文章目录
  1. 1. webstrom format不工作
  2. 2. shell
  3. 3. TCL (工具命令语言(Tool Command Language))
  4. 4. node错误处理
  5. 5. shell脚本 条件判断错误
    1. 5.1. node同一个端口支持http和https(只能作为服务器,不能作为代理)

webstrom format不工作

原因: 插件失效

shell

  • 获取日期时间 d=date '+%Y-%m-%d %H:%M:%S'
  • 使用expect实现自动交互功能
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # expect 示例1
    #! /usr/bin/expect
    expect << EOF
    spawn python upload.py -y
    expect "username:"
    send "myusename\r"
    expect "password:"
    send "mypassword\r"
    expect "New issue subject:"
    send "issuename\r"
    expect eof
    exit
1
2
3
4
5
6
7
8
9
# expect 示例2
spawn python upload.py -y
expect {
"username:" { send "myusename\r"; exp_continue}
"password:" { send "mypassword\r"; exp_continue }
"New issue subject:" {send "issuename\n"; exp_continue}
"please visit" {exit}
}

TCL (工具命令语言(Tool Command Language))

node错误处理

shell脚本 条件判断错误

[shell脚本报错:”[: =: unary operator expected”](http://blog.csdn.net/goodlixueyong/article/details/6564591)
在匹配字符串相等时,我用了类似这样的语句:

1
2
3
if [ $STATUS == "OK" ]; then
echo "OK"
fi

在运行时出现了 [: =: unary operator expected 的错误,就一直找不到原因,尝试了删除等号两侧的空格和括号里的空格都不管用,最后baidu了一下,才找到原因。把语句改成这样就不会出错了.

1
2
3
if [[ $STATUS = "OK" ]]; then
echo "OK"
fi

究其原因,是因为如果变量STATUS值为空,那么就成了 [ = “OK”] ,显然 [ 和 “OK” 不相等并且缺少了 [ 符号,所以报了这样的错误。当然不总是出错,如果变量STATUS值不为空,程序就正常了,所以这样的错误还是很隐蔽的。

或者用下面的方法也能避免这种错误:

1
2
3
if [ "$STATUS"x == "OK"x ]; then
echo "OK"
fi

当然,x也可以是其他字符。顺便提一点,shell中有没有双引号在很多情况下是一致的。

node同一个端口支持http和https(只能作为服务器,不能作为代理)

摘自:http://www.cnblogs.com/dojo-lzz/p/5479870.html
众所周知node是一个高性能的web服务器,使用它可以很简单的创建一个http或https的服务器。
比如一个很简单的http服务器:

1
2
3
4
5
6
7
8
9
var http = require('http');
var https = require('https');
var httpPort = 3345;
var server = http.createServer(function(req, res){
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('hello world!');
}).listen(httpPort);

https服务器需要生成证书,详情请看这篇文章:HTTPS 的原理和 NodeJS 的实现。这里我们直接看最终成果,附件证书。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var https = require('https');
var fs = require('fs');
var httpsPort = 3346;
var options = {
key: fs.readFileSync('./cakey.pem'),
cert: fs.readFileSync('./cacert.pem')
};
var sserver = https.createServer(options, function(req, res){
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('secured hello world');
}).listen(httpsPort);

从上文我们可以看出,node生成的每个服务器必须分配一个端口。那么如果我们在工作中遇到一个需求:让同一个端口或地址既支持http协议又支持https协议,这时候我们该怎么办,有的同学很可能想到用nginx做反向代理,这不失为一个解决方案,但这也同样意味着增加了产品的复杂度,用户并不想去折腾ngnix。
办法是有的,原理就要搬出OSI的七层模型:
a8ec8a13632762d04284e772a1ec08fa503dc641
HTTP与HTTPS都属于应用层协议,所以只要我们在底层协议中进行反向代理,就可以解决这个问题! 刚好node可以让我们很方便的创建一个tcp服务器!

所以我们的核心代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
var net = require('net');
var http = require('http');
var https = require('https');
var fs = require('fs');
var httpPort = 3345;
var httpsPort = 3346;
var server = http.createServer(function(req, res){
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('hello world!');
}).listen(httpPort);
var options = {
key: fs.readFileSync('./cakey.pem'),
cert: fs.readFileSync('./cacert.pem')
};
var sserver = https.createServer(options, function(req, res){
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('secured hello world');
}).listen(httpsPort);
net.createServer(function(socket){
socket.once('data', function(buf){
console.log(buf[0]);
// https数据流的第一位是十六进制“16”,转换成十进制就是22
var address = buf[0] === 22 ? httpsPort : httpPort;
//创建一个指向https或http服务器的链接
var proxy = net.createConnection(address, function() {
proxy.write(buf);
//反向代理的过程,tcp接受的数据交给代理链接,代理链接服务器端返回数据交由socket返回给客户端
socket.pipe(proxy).pipe(socket);
});
proxy.on('error', function(err) {
console.log(err);
});
});
socket.on('error', function(err) {
console.log(err);
});
}).listen(3344);

文章目录
  1. 1. webstrom format不工作
  2. 2. shell
  3. 3. TCL (工具命令语言(Tool Command Language))
  4. 4. node错误处理
  5. 5. shell脚本 条件判断错误
    1. 5.1. node同一个端口支持http和https(只能作为服务器,不能作为代理)