zoukankan      html  css  js  c++  java
  • LINUX三剑客

    函数: fun(){

    body

    return

    }

    读入数据使用read   读取函数的返回return使用 $?

    #!/bin/bash
    #author:Frank
    fun(){
    echo "这是我的第一个shell函数,返回两个数字的和"
    echo "输入第一个函数:"
    read num1
    echo "输入第二个函数:"
    read num2
    echo "返回两个数:$num1和$num2"
    return $(($num1+num2))
    }
    fun
    echo "两个函数的和为:$?"

    函数参数:$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。

    fun(){
    echo "返回第一个参数:$1"
    echo "返回第二个参数:$9"
    echo "返回第10个参数:$10"
    echo "返回第10个参数:${10}"
    echo "返回参数的个数:$#"
    echo "返回所有参数作为一个字符串:$*"
    }
    fun 1 2 3 4 5 6 7 8 9 20 30 40

    shell 的输入和输出:

    read用来读取输入,并赋值给变量,echo printf 可以输出变量

    >file   可以将输出重定项到另一个文件夹  >>表示追加

    <file  表示输入重定项    |  表示把前一项输出传入到下一个命令的输入

    标准输入用0表示  标准输出用1表示, 标准错误输出用2表示     2>&1 >logs  会将标准的错误输出和正常的输出都重定向到logs

    [11086263@izuf60jasqavbxb9efockpz ~]$ echo hello world | while read x;do echo $x>babys;done
    [11086263@izuf60jasqavbxb9efockpz ~]$ cat babys
    hello world

    LINUX 三剑客

    grep  基于正则表达式查找满足条件的 行 (定位)  select * from table 

    awk  根据查到的数据处理其中的分段 列 (数据切片) select ziduan  from table

    sed  根据定位到的数据修改数据  (数据修改)  updata table set file=new where file=old

    [11086263@izuf60jasqavbxb9efockpz ~]$ cat babys
    hello world
    12346
    00000
    2345678
    [11086263@izuf60jasqavbxb9efockpz ~]$ cat babys | grep "Hello"        大写导致匹配不出数据
    [11086263@izuf60jasqavbxb9efockpz ~]$ cat babys | grep -i "Hello"    -i 不区分大小写
    hello world
    [11086263@izuf60jasqavbxb9efockpz ~]$ cat babys | grep -i -v "Hello"  -v去掉匹配出来的数据,输出剩余数据
    12346
    00000
    2345678
    [11086263@izuf60jasqavbxb9efockpz ~]$ cat babys | grep -i -v -o "Hello"
    [11086263@izuf60jasqavbxb9efockpz ~]$ cat babys | grep -i -o "Hello"  -o 把每个匹配的内容用独立的行表示出来
    hello

     "12346" -A -B -C 后面都跟阿拉伯数字,-A是显示匹配后和它后面的n行。-B是显示匹配行和它前面的n行。-C是匹配行和它前后各n行。总体来说,-C覆盖面最大[11086263@izuf60jasqavbxb9efockpz ~]$ cat babys | grep -A 2

    12346
    00000
    2345678

    [11086263@izuf60jasqavbxb9efockpz ~]$ grep "2" -nr ./babys   #grep是在当前目录下(或者是制定目录下)递归搜索  -n是输出行数的意思
    2:12346
    4:2345678
    [11086263@izuf60jasqavbxb9efockpz ~]$ cat babys |grep "2" -nr $x
    grep: 00000: 没有那个文件或目录

     正则表达式

    基本表达式

    ^表示开头$表示结尾   

    [0-9]  [a-z] 代表区间  [1-9]表示1-9的整数区间,[^1-9]

    *表示0个或多个

    扩展表达式

    ?表示非贪婪匹配

    +表示一个或多个

    ()表示分组

    {}表示范围分布

    | 匹配多个表达式中的任意一个

    awk

    awk理论上可以代替grep

    awk 'pattern{action}'

    awk 'BEGIN{}END{}' 开始和结束 awk '/Running/' 正则匹配
    awk '/aa/,/bb/' 区间选择
    awk '$2~/xxx/' 字段匹配

    awk 'NR==2' 取第二行 awk 'NR>1' 去掉第一行

    用法一: $awk '{[pattern] action}'{filenames}:

     -F' ' 表示把搜索结果按照空格分割 

     去掉前两行结果

    -F 参数指定字段分隔符

    BEGIN{FS="_"} 也可以表示分隔符

    $0代表当前的记录 $1代表第一个字段
    $N 代表第N个字段 $NF 代表最后一个字段

    -v 设置参数   $1引用第一个参数

    运算符: 

    ||  或   &&与   in  数组成员    < <= > >= != ==关系运算符   ~ ~!匹配正则表达式和不匹配正则表达式

     

    内建变量

    FS 字段分隔符
    OFS 输出数据的字段分隔符

    RS 记录分隔符

    ORS 输出字段的行分隔符

    NF 字段数

    NR 记录数

     

    字段分割:

    echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | awk -F/ '{print $1,$2,$3,$4}'    #先把字符串按照 :分割后逐行显示, 然后 按照/将每行分割成列
    echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | awk 'BEGIN{FS="/"}{print $1,$2,$3,$4}'

    echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | awk 'BEGIN{FS="/|-"}{print $1,$2,$3,$4}'

    修改OFS和ORS让$0重新计算
    echo $PATH | awk 'BEGIN{FS=":";OFS=" | "}{$1=$1;print $0}'

    echo $PATH | awk 'BEGIN{RS=":";ORS="^"}{print $0}'

    把单行分拆为多行

    echo $PATH | awk 'BEGIN{RS=":"}{print $0}'
    echo $PATH | awk 'BEGIN{RS=":"}{print NR,$0}' echo $PATH | awk 'BEGIN{RS=":"}END{print NR}'

    echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | awk 'BEGIN{FS=" ";ORS=":"}{print $0}'

    多行合并成单行

    echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | awk 'BEGIN{FS=" ";ORS=":"}{print $0}'

    sed

    sed [addr]X[options] -e 表达式

    sed -n '2p' 打印第二行
    sed 's#hello#world#' 修改 -i 直接修改源文件
    -E 扩展表达式
    --debug 调试

    echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | sed 's#/ #----#g'

    echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | sed -n '/ ^/bin/,/sbin/p'

    sed -i '.bak' -e '' -e ''

  • 相关阅读:
    Linux环境下使用eclipse开发C++动态链接库程序
    例解 autoconf 和 automake 生成 Makefile 文件
    linux下编译boost
    在linux下如何编译C++程序
    windows和linux套接字中的select机制浅析
    看到关于socket非阻塞模式设置方式记录一下。
    MySQL批量执行sql文件
    Sqlcmd使用详解
    批量执行SQL文件
    SpringCloud微服务之跨服务调用后端接口
  • 原文地址:https://www.cnblogs.com/1026164853qqcom/p/11069716.html
Copyright © 2011-2022 走看看