shell 批量关闭端口
在开发小程序的时候 频繁的 npm run dev 每次都会占用一个端口。
为了一起杀死这些连续的端口,特意写了一个shell脚本。
建shell文件:
1 | sudo vi kill_port.sh |
shell内容:
1 | !/bin/bash |
操作实例:
不熟悉shell的朋友可以继续看下去,了解shell的朋友可绕过。
接下来,我详细说明一下这个shell内容:
1、起始行就不用说了
1 |
2、read
1 | read命令 -p(提示语句) -n(字符个数) -t(等待时间) -s(不回显) |
3、if[[ ]]
在命令行里test expr和[ expr ]的效果相同。
test的三个基本作用是判断文件、判断字符串、判断整数。支持使用 ”与或非“ 将表达式连接起来。
test中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq, -gt这种形式。
无论是字符串比较还是整数比较都千万不要使用大于号小于号。当然,如果你实在想用也是可以的,对于字符串比较可以使用尖括号的转义形式, 如果比较"ab"和"bc":[ ab < bc ],结果为真,也就是返回状态为0.
[[ ]] 在shell中的一个命令,它就比test强大的多了。支持字符串的模式匹配(使用=~操作符时甚至支持shell的正则表达 式)。逻辑组合可以不使用test的-a,-o而使用&& 。
字符串比较时可以把右边的作为一个模式(这是右边的字符串不加双引号的情况下。如果右边的字符串加了双引号,则认为是一个文本字符串。),而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。
4、-z
[ -z STRING ] “STRING” 的长度为零则为真。
[ -n STRING ] or [ STRING ] “STRING” 的长度为非零 non-zero则为真。
1 | lsof -i:$i awk '{print $2}' grep -v 'PID' |
这个是linux 命令。
5、lsof -i :8082 知道8082端口被哪个进程占用
6、awk ‘{print $2}’
$2:表示第二个字段
print $2 : 打印第二个字段
grep 是查找含有指定文本行的意思,比如grep cpu 就是查找含有cpu的文本的行
grep -v 是反向查找的意思,比如 grep -v ‘PID’ 就是查找不含有 PID 字段的行
整个命令的意思就是:从查找的端口返回的内容中,找到每行的第二个字段,那就是 PID 和4218,再通过反向查找,去掉 PID,那就只剩下4218了。赋值给j
7、kill -15 $j;kill -9 $j
kill - 9 表示强制杀死该进程;而 kill 则有局限性,例如后台进程,守护进程等;
1) 关闭socket链接
2) 清理临时文件
3) 将自己将要被销毁的消息通知给子进程
4) 重置自己的终止状态
再说一下:
SIGNKILL(9) 和 SIGNTERM(15) 的区别在于:
SIGNKILL(9) 的效果是立即杀死进程. 该信号不能被阻塞, 处理和忽略。
SIGNTERM(15) 的效果是正常退出进程,退出前可以被阻塞或回调处理。并且它是Linux缺省的程序中断信号。
建议做法:先使用kill -15,然后再使用kill -9
8、expr
'expr’支持普通的算术操作,算术表达式优先级低于字符串表达式,高于逻辑关系表达式。
expr 对表达式
的格式有几点特殊的要求:
- 出现在
表达式
中的运算符、数字、变量和小括号的左右两边至少要有一个空格,否则会报错。 - 有些特殊符号必须用反斜杠
\
进行转义(屏蔽其特殊含义),比如乘号*
和小括号()
,如果不用\
转义,那么 Shell 会把它们误解为正则表达式中的符号(*
对应通配符,()
对应分组)。 - 使用变量时要加
$
前缀。
9、echo -e
-e:激活转义字符。使用-e选项时,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
•\a 发出警告声;
•\b 删除前一个字符;
•\c 最后不加上换行符号;
•\f 换行但光标仍旧停留在原来的位置;
•\n 换行且光标移至行首;
•\r 光标移至行首,但不换行;
•\t 插入tab;
•\v 与\f相同;
•\ 插入\字符;
•\nnn 插入nnn(八进制)所代表的ASCII字符;
格式: echo -e “\033[字背景颜色;字体颜色m字符串\033[0m”
例如:echo -e “\033[37m $i port kill done! \033[0m”;
其中37代表字的颜色。 白色
例如:echo -e “\033[41;37m 共关闭 $N 个端口号 \033[0m”;
其中41的位置代表底色, 37的位置是代表字的颜色。 41 红色。
字背景颜色范围:40----49
40:黑
41:深红
42:绿
43:黄色
44:蓝色
45:紫色
46:深绿
47:白色
字颜色:30-----------39
30:黑
31:红
32:绿
33:黄
34:蓝色
35:紫色
36:深绿
37:白色
shell 批量关闭端口