zoukankan      html  css  js  c++  java
  • shell基础 以及 sed、awk

    1、沙棒#!

        

    查看系统支持的shell:

        

    2、变量引用

    格式

    $变量名

    ${变量名}

    单反引号(`)

    单反引号用来优先执行某系些行为,获取其结果

    弱引用 vs 强引用

    弱引用("")会识别字符串中的变量,将其替换,反之强引用认为单反是包含在''内的都为字符串,除非参数控制

    3、条件判断

    1、基本语法

    if [ $1 -eq 1 ]
    
    then
    
        echo "------"
    
    fi

     

    2、多层判断

    if [ $1 -eq 1 ]
    
    then
    
        echo "------"
    
    else [ $1 -eq 2 ]
    
    then
    
        echo "+++++++"
    
    else
    
        echo "=========="
    
    fi

    3、正则匹配

    a='123'
    
    if [[ "$a" =~ "4" ]]
    
    then
    
        echo "存在2"
    
    else
    
        echo "不存在"
    
    fi

    4、for 循环

    1、循环数组:

    a=(1 2 3 4 5 6)
    
    for i in ${a[*]}
    
    do 
    
        echo "$i"
    
    done

    2、自定义数字列表

     

    for i in `seq 10`
    
    do 
    
        echo "$i"
    
    done

     

    case语法

    count1=$1
    
    case $count1 in
    
        1) echo "today is Monday";;
    
        2) echo "today is Tuesday";;
    
        3) echo "today is Wednesday";;
    
        4) echo "today is Thursday";;
    
        5) echo "today is Friday";;
    
        6) echo "today is Saturday";;
    
        7) echo "today is Sunday";;
    
        *) break;;
    
    esac

    位置参数

    1、执行文件名后追加参数,根据空格分隔,脚本内部通过$1-$9回去对应位置的参数

    2、位置参数超过10的时候,脚本内部获取参数要用{}括起来

    5、函数

    1、提前定义

    2、function关键字存在的时候,函数名后的()可有可无,反之必须存在

    3、语法结构:

    function varname(){

    代码块

    }

    函数传参:

    1、同样支持位置变量,在函数内部通过 $1 $2....方式获取

    2、函数内部无法通过${1..10}获取外部传入变量,必须通过自定义变量先获取到外部变量,然后在函数内部引用自定义计量的方式

    6、删除

    删除是shell脚本最危险的一种操作,删除资源的时候带上绝对路径/相对路径

    1、严禁直接使用rm -rf *

    2、尽量减少通配符的使用

    7、嵌套python

    b=123
    
    python3 - <<EOF
    
    print("https://www.baidu.com?a={}".format($1))
    
    EOF

     

    8、sed

    Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等

    参数:

    • -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
    #在file.log文件的第四行后添加一行,并将结果输出到标准输出
    
    sed -e 4a
    ewLine file.log 

    #多点编辑
    nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
    • -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。

    动作:

    • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
      nl /etc/passwd | sed '2a test 123' #第3行插入”test 123“
    • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
      nl /etc/passwd | sed '2,5c test 123' #将第2-5行的内容取代成为test 123
    • d :删除,所以 d 后面通常不接任何东西
      nl /etc/passwd | sed '3,$d' #删除3到最后一行
      nl /etc/passwd | sed  '/root/d' #删除有root关键字的行
    • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
      nl /etc/passwd | sed '2i test 123' #第2行插入”test 123“
    • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
      nl /etc/passwd | sed '/root/p' #搜索 /etc/passwd中有root关键字的行
    • s :取代,可以直接进行取代的工作, s 的动作可以搭配正则,例如 1,20s/old/new/g 
      sed 's/正则字串/新的字串/g'

       

    9、awk

    AWK 是一种处理文本文件的工具,以下为常见的几种用法

    # 每行按空格或TAB分割,输出文本中的1、4项
    awk '{print $1,$4}' log.txt

    # 使用","分割
    awk -F, '{print $1,$2}'   log.txt

    # 设置变量a=1awk -va=1 '{print $1,$1+a}' log.txt

    # 过滤第一列大于2并且第二列等于'Are'的行 ($1表示第一列,可结合运算符使用)
    awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt
  • 相关阅读:
    hdu 2089 不要62(数位dp)
    hdu 3555 Bomb(数位dp)
    hdu 4544 湫湫系列故事——消灭兔子(优先队列)
    STL Algorithms 之 unique
    hdu 1075 What Are You Talking About(map)
    hdu 4268 Alice and Bob(贪心+multiset)
    hdu 4302 Holedox Eating(优先队列/线段树)
    9-16Jenkins-4节点
    9-16Jenkins-3可用的环境变量、参数化构建和依赖
    9-16Jenkins-2定时任务
  • 原文地址:https://www.cnblogs.com/shadow-yin/p/14843054.html
Copyright © 2011-2022 走看看