美文网首页
Shell使用总结(持续更新中......)

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

作者: 大数据ZRL | 来源:发表于2020-01-20 18:00 被阅读0次

    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 "不等"
    
    • 注意:两个字符串前后必须留有空格

    相关文章

      网友评论

          本文标题:Shell使用总结(持续更新中......)

          本文链接:https://www.haomeiwen.com/subject/wvajzctx.html