• shell脚本学习笔记


    删除某几列:awk '{$1=""; $2=""; $3=""; $4=""; $5="";sub("     ", ""); print}' aa.txt >> bb.txt

    指定awk的分隔符:cat ff5.txt | awk -F '|' '{print $1,$3}' >> ret33.txt

    #!/bin/bash 不具有适应性,可以改成 #!/usr/bin/env bash,它会到PATH环境变量中找bash
    可以用下面的命令查看本机支持的解释器:cat /etc/shells

    #!/usr/bin/env bash
    my()
    {
            if [ $# != 2 ]
                    then echo "not equal"
            else
                    echo "equla"
            fi
            }
    my “$@”

    太长使用反斜杠分行,反斜杠前要有空格

    ./configure
    –prefix=/usr
    –sbin-path=/usr/sbin/nginx
    –conf-path=/etc/nginx/nginx.conf

    在使用"$"来获取变量的时候最好加上双引号
    var="*.sh"
    echo $var
    echo "$var"
    他的运行结果如下:
    a.sh
    *.sh

    ==实现类似的main函数

    #!/usr/bin/env bash
    func1(){  
    }
    func2(){ 
    }
    
    main(){
        func1
        func2
    }
    main "$@"

    在没有任何限定说明的情况下,shell默认变量属于全局类型(变量v1的作用域从被定义的地方开始,到shell结束)

    函数参数为局部类型,只能在当前函数内部使用。

    向文件里写数据

    cat>>./temp.conf << EOF
    log file = /usr/local/logs/rsyncd.log
    transfer logging = yes
    log format = %t %a %m %f %b
    syslog facility = local3
    EOF

     在脚本里直接执行pwd获得的是当前shell脚本的执行路径,而不是当前脚本的所在路径应当先cd进当前脚本的目录然后再pwd

     ===shell中最简单的并行化是通过"&"以及"wait"命令来做:

    这里并行的次数不能太多,否则机器会卡死。稍微正确的做法比较复杂,以后再讨论
    #!/usr/bin/env bash
    func()
    {
               echo $1
    }
    for((i=0;i<10;i++))
    do
        func $i  &
    done
    wait
    echo "oooo"

     显示包含"hhh"的行到包含"omc"的行之间的行: sed -n '/hhh/,/omc/p' yum.log

    多个变量的替换:find . -name '*.txt' |xargs sed -i "s/233/666/g;s/235/626/g;s/333/616/g;s/233/664/g"

    find . -name '*.txt' |xargs -P $(nproc) sed -i "s/233/666/g;s/235/626/g;s/333/616/g;s/233/664/g"
    -P参数指定并行度

    尽量使用func(){}来定义函数,而不是func{}
    尽量使用$()将命令的结果赋给变量,而不是反引号
    尽量使用[[]]来代替[]
    在复杂的场景下尽量使用printf代替echo进行回显
    这些新写法很多功能都比旧的写法要强大,用的时候就知道了。

    使用cp -r命令复制文件夹的时候要注意如果目的文件夹不存在则会创建,如果存在则会复制到该文件的子文件夹下

    简单的if尽量使用&& ||,写成单行。比如[[ x > 2]] && echo x

    ============

    交互式shell脚本:expect就是一个专门用来实现自动交互功能的工具

  • 相关阅读:
    kubernetes 用到的工具及组件
    kubernetes整个基础环境的准备
    docker可视化管理Portainer
    Docker Swarm的命令
    Docker网络设置及文件挂载
    Docker常见命令
    Docker 中国官方镜像加速
    Docker安装
    k8s中教你快速写一条yaml文件
    Kubernetes CoreDNS 状态是 CrashLoopBackOff 报错
  • 原文地址:https://www.cnblogs.com/testzcy/p/12516882.html
Copyright © 2020-2023  润新知