Shell使用总结(持续更新中......)

dt='20200201'

  • dt的前一天:pre_date=`date -d "-1days ${dt}" +%Y%m%d`

  • dt所在月份的第一天:startdt=`date -d "${dt}" +%Y%m01`

  • dt所在月份的最后一天:enddt={month}(cal {dt:4:2}{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 显示建立相关链接的程序名
  • 例如查看 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 "不等"
  • 注意:两个字符串前后必须留有空格
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容