dt='20200201'
-
dt的前一天:pre_date=`date -d "-1days ${dt}" +%Y%m%d`
-
dt所在月份的第一天:startdt=`date -d "${dt}" +%Y%m01`
-
dt所在月份的最后一天:enddt=(cal {dt:0:4}|perl -0nle 'print+(split)[-1]')
-
dt中取年月:month=${dt:0:6}
-
dt所在月份的总天数:mtday=$[enddt-startdt+1]
-
返回固定格式的日期:date +%Y%m%d%H%M%S
字符串中的换行问题
-
data="001,abc,101,20200101
002,abc,102,20200102
003,abc,103,20200103
004,abc,104,20200104"- 换行符自动变成空格:echo $data
- 换行符保留:echo "${data}"
Linux 查看端口占用情况(lsof和netstat)命令
------lsof------
- lsof(list open files)是一个列出当前系统打开文件的工具
- lsof 查看端口占用语法格式:
lsof -i:端口号
- 查看服务器 8000 端口的占用情况:
~$ lsof -i:8000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nodejs 26993 root 10u IPv4 37999514 0t0 TCP *:8000 (LISTEN)
可以看到 8000 端口已经被轻 nodejs 服务占用。
- 更多 lsof 的命令如下
- lsof -i:8080:查看8080端口占用
- lsof abc.txt:显示开启文件abc.txt的进程
- lsof -c abc:显示abc进程现在打开的文件
- lsof -c -p 1234:列出进程号为1234的进程所打开的文件
- lsof -g gid:显示归属gid的进程情况
- lsof +d /usr/local/:显示目录下被进程开启的文件
- lsof +D /usr/local/:同上,但是会搜索目录下的目录,时间较长
- lsof -d 4:显示使用fd为4的进程
- lsof -i -U:显示所有打开的端口和UNIX domain文件
------netstat------
-
netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关情况。
-
netstat 查看端口占用语法格式:
- netstat -tunlp | grep 端口号
- -t (tcp) 仅显示tcp相关选项
- -u (udp)仅显示udp相关选项
- -n 拒绝显示别名,能显示数字的全部转化为数字
- -l 仅列出在Listen(监听)的服务状态
- -p 显示建立相关链接的程序名
- netstat -tunlp | grep 端口号
-
例如查看 8000 端口的情况,使用以下命令:
netstat -tunlp | grep 8000
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 26993/nodejs
进程状态
- 查看正在运行的程序的进程ID:pgrep pycharm
- 终止这个程序:kill -9 进程ID
查看内存使用情况
- free -h
查看资源占用, 按CPU占用排行
- top -c
scp与ssh时指定端口的坑
- scp -P 65533 a.txt username@ip:/dest/(大写的P)
- ssh -p 65533 username@ip:/dest/(小写的p)
Shell脚本中$0、$?、$!、$$、$*、$#、$@等的意义
- $$
- Shell本身的PID(ProcessID,即脚本运行的当前进程ID号)
- $!
- Shell最后运行的后台Process的PID(后台运行的最后一个进程的进程ID号)
- $?
- 最后运行的命令的结束代码(返回值)即执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
- $-
- 显示shell使用的当前选项,与set命令功能相同
- $*
- 所有参数列表。如"$*"用「"」括起来的情况、以" $1 $2 … $n"的形式输出所有参数,此选项参数可超过9个。
- $@
- 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
- $@ 跟$*类似,但是可以当作数组用
- $#
- 添加到Shell的参数个数
- $0
- Shell本身的文件名
- $1~$n
- 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
字符串操作
- 将字符c换成x
var=‘abcdcf’
var=${var//c/x}
- 将含有换行和空格的字符串转化为数组
var='ab 12 cd'
var=($var)
echo ${var[1]} # 获取索引1处的元素
数组遍历
- for ... in ...
for element in ${res[@]}
# 也可以这样写:for element in ${array[*]}
do
echo $element
done
- 利用数组长度
for(( i=0;i<${#res[@]};i++))
do
# ${#array[@]}获取数组长度用于循环
echo ${res[i]}
done
if-else语句的骚气写法
[ 'a3' == 'as' ] && echo "相等" || echo "不等"
- 注意:两个字符串前后必须留有空格
网友评论