zoukankan      html  css  js  c++  java
  • shell脚本大全(to del)

    1 条件判断
    数字比较:
       -eq 等于;-ne 不等于;-gt 大于;-lt 小于;-ge 大于等于;-le 小于等于;
    字符串比较
      不相等 "$A" !="$B" 相等"$A" =="$B"

    2 各种循环
     while true循环:
      while :
      do
        内容
      done
     
     while循环
      while [ $i -le 100 ]
      do
        let i+=2
      done

     for循环,可以遍历指定数组;
      a=(1 2 3 4 6 7 8 9 10 11 12 13)
      for i in "${!a[@]}";
      do
        echo "${a[$i]}"
      done

    3 时间相关操作
    3.1 获取当前时间
      $(date +"%Y-%m-%d %H:%M:%S")

    计算某个程序的耗时;代码如下:

      startTime_s=`date +%s`
      operateXXX
      endTime_s=`date +%s`
      sumTime=$[ $endTime_s - $startTime_s ]
      echo "time cost : $sumTime s"

      如何将耗时以s统计的,换成以分钟,小时统计的呢?
        可以直接使用[],如下,不过这种方式都是int数除法,比如4/3 = 1;
          echo "cost : $sumTime s = $[sumTime/60] m = $[sumTime/3600] h"
        如果需要小数,可以使用bc工具,用scale控制保留几位小数;
          time_m=`echo "scale=2; $sumTime/60 " | bc`
          time_h=`echo "scale=2; $sumTime/3600 " | bc`
          echo "time cost : $sumTime s = $time_m m = $time_h h ----"

        也可不使用time_m,直接加到命令中,如下;
          echo "time cost : $sumTime s = `echo "scale=2; $sumTime/60 " | bc` m = `echo "scale=2; $sumTime/3600 " | bc` h"

    3.2 指令修改系统时间

      date 查看目前系统时间;

      更新时间如下:

        date -s 20201103 

        date -s 18:32:23

    
    

    4 $?返回上一条指令结果;
      function add(){
        return `expr $1 + $2`
      }
      add 23 50 #此处返回73
      if [ $? -eq 73 ]
      then
        echo "yyy $?"
      else
        echo "nnn $?"
      fi
    注:结果输出为yyy 0;因为18行返回的是16行的结果;

    5 获得键盘输入
    read -p "are you ok?(y/n)" to_continue
    if [ -z $to_continue ] #结果为空
    then
       exit -1
    else
      if [ $to_continue != 'y' ] #结果不等于y
      then
        echo "exit"
         exit -1
      fi
    fi

    6 获取文件中每一行数据,并输出
      cat 文件名 | while read line
      do
        echo $line
      done

    7 远程拷贝,不需要二次输入密码,使用nohup,并且不在控制台显示信息;
    a nohup sshpass -p "密码" scp -r 要拷贝的文件 目标路径 > scp_log 2>&1 &
    b nohup sshpass -p "密码" scp -r 要拷贝的文件 目标路径 &

    说明:
      sshapass -p 设定密码scp,无需每次输入密码;
      a比b的优势是a直接将结果输入到scp_log中,b默认输出到nohup文件,并在控制台显示;
      nohup 操作 & 意思执行操作,忽略所有挂断信号;

    8 带颜色的字体输出

      字体颜色
        #30:黑 ;#31:红 ;#32:绿 ;#33:黄 ;#34:蓝色 ;#35:紫色 ;#36:深绿 ;#37:白色

      背景颜色
        #40:黑 ;#41:深红 ;#42:绿 ;#43:黄色 ;#44:蓝色 ;#45:紫色 ;#46:深绿 ;#47:白色

      echo -e "e[47;35m你好e[0m"白底紫字

    9 输出结果到屏幕(控制台)同时写入文件
      假设run.sh有输出,则
        sh run.sh | sed "w log"
      结果写入log;

    10 shell中引号的区别:单引号,双引号,反引号(一般是键盘ESC下边那个)

    上代码:

    name=tim
    echo '1 $name has $800'
    echo "2 $name has $800"
    echo '3 $name has $800'
    echo "4 $name has $800"

    echo '5 ls ./'
    echo "6 ls ./"
    echo `ls ./`

    输出:

    1 $name has $800
    2 tim has 00
    3 $name has $800
    4 tim has $800
    5 ls ./
    6 ls ./
    文件列表
    说明:
      1 单引号将所有内容当做字符,一视同仁,忽略所有的命令和特殊字符;双引号可以包含特殊字符并解析,并且需要输出特殊字符,需要加;反引号内部是一个命令,会先执行命令,然后返回结果;
      2 输出说明:
        1是单引号,所以直接输出结果;2是双引号,所以对$name进行解析;3是单引号,同1;4想输出$字符,加转义字符;5,6直接输出;7 执行ls操作,返回文件列表;

    11 用户账户管理

      a 建用户:
        adduser peter //新建peter用户
        passwd peter //给peter用户设置密码,修改密码

      b 永久性删除用户账号
        userdel peter

      c 给用户改变权限

        vim /etc/passwd文件

          root:x:0:0:root:/root:/bin/bash
          peter:x:0:0::/home/peter:/bin/bash#将x后边的改成都改成0即可,权限和root就一致了,注:此操作不可取,乃是黑客常用手段;

      d 某些系统会对密码有要求,例如,密码必须有多少个数字,多少个小写字母之类的规则;

              在/etc/pam.d/system-auth中设置;
              该行内容如下:
                password    requisite     pam_pwquality.so minlen=9 try_first_pass local_users_only retry=3 authtok_type= enforce_for_root ocredit=0 lcredit=-1 ucredit=    0 dcredit=0 [badwords=first2012++]
        说明:
                minlen=8 最小密码长度为8位
                   ucredit=-2 最少有2个大写字母
                   lcredit=-4 最少4个小写字符
                     dcredit=-1 最少1个数字
                     ocredit=-1 最少1个符号
                     remember=5 密码最近5次的不能重用
           按需要进行设计即可;
     
      e vim /etc/login.defs,内存有登录信息,密码有效期等信息;

    12 crontab

      作用:相当于时钟,可以定时完成某个操作;
      命令:
        crontab -u root -e r l 
          -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI;也可以直接打开/etc/crontab编辑;
          -r : 删除目前的时程表,注:是全部删除,慎用;
          -l : 列出目前的时程表

      内部格式:

        * * * * * 操作
        - - - - -
        | | | | |
        | | | | +----- 星期中星期几 (0 - 7) (星期天 为0)
        | | | +---------- 月份 (1 - 12)
        | | +--------------- 一个月中的第几天 (1 - 31)
        | +-------------------- 小时 (0 - 23)
        +------------------------- 分钟 (0 - 59)
        举例:
          0 */2 * * * oper 意思是每两个小时oper一下
          */2 * * * * oper 每两分钟oper一下
          50 7 * * * oper 每天7:50oper
          50 22 * * * oper 每天22:50
          0 0 1,15 * * oper 每月1号和15号
          1 * * * * oper 每小时的第一分
          00 03 * * 1-5 oper 每周一至周五3点钟,
          30 6 */10 * * ls 意思是每月的1、11、21、31日是的6:30执行一次ls命令

      注:一般root账户,可以设置user,如果是非root账户,无需在crontab -e中设置账户,默认就是当前账户;crontab失效原因一般是:路径和权限错误,特别是sh文件,里边需 加上bin/bash等信息;

      crond 是linux执行周期性任务的守护进程,命令如下:

        service crond start //启动服务

        service crond stop //关闭服务  

        service crond restart //重启服务

        service crond reload //重新载入配置

        service crond status //查看crontab服务状态:

      注:crond一般是打开的,这时候执意要你crontab -e,就会自动的更新,无需重启等操作;

    14 字符串操作

      字符串拼接:

        str1=“”

        str1=$str1"xxxx "

    15 查看端口是否被占用

      ss -lntpd 展示所有端口;

      ss -lntpd | grep :22 寻找端口号22被什么程序占用;

    16 patch 命令

    用于修补文件,包括修改,更新文件;

    17 sort 对ip排序:

    命令说明:

    ”-t” : 表示以那个字符做分割
    “-k” :和-t结合使用,表示取那一段为关键字进行排序,后面跟数据,1…n,表示取第几段,也可以是范围如1,3,表示将第1段到第3段作为一个整体来排序
    “-n” :以数字进行排序
    “-r” :倒序

    # 按升序排序
    sort -t'.' -k1,1n -k2,2n -k3,3n -k4,4n ip.txt

    # 按降序排序
    sort -t'.' -k1,1nr -k2,2nr -k3,3nr -k4,4nr ip.txt

    18 常见shell指令

        ls/ll/ls -lht
        du -sh/du -sh *
        df -h
        gdb --args
        find . -name "*.cpp"|xargs cat|wc -l 统计代码行数;
        find ./file/ -size +2M 查找file文件夹下文件尺寸大于2M的文件;

    欢迎拍砖

     
  • 相关阅读:
    dpdk 连接错误
    strace 跟踪文件
    鲲鹏服务器 centos 升级gcc + 安装qemu
    centos 升级gcc
    undefined reference to `shm_open'
    Golang与C互用
    [ TIME ] Timed out waiting for device dev-ttyS0.device. [DEPEND] Dependency failed for Serial Getty on ttyS0.
    大型 Web 应用插件化架构探索
    网易游戏基于 Flink 的流式 ETL 建设
    基于WASM的无侵入式全链路A/B Test实践
  • 原文地址:https://www.cnblogs.com/hanlaomo/p/12785694.html
Copyright © 2011-2022 走看看