SHELL学习笔录


前段时间学了学shell,做了些笔记,希望对好学者有所帮助,如下:

1.echo "hello"    输出hello,自动打印换行符

  echo "hello \c" 然echo不打印换行符
  echo *     显示所有文件,不包括隐藏文件
  echo .*    显示隐藏文件
2.printf format-string[arguments] 几乎实现了C中printf的功能,它不像echo自动换行
3.重定向
    <  改变标准输入   program < file 将program的标准输入改为file
      >  改变标准输出   program > file 将program的标准输出改为file
                目标文件file不存在时,会新建file,若存在则会覆盖
                program >> file  不覆盖已有file,而是把内容追加在file结尾处
4.参数使用:
    $n  第n个参数(和C中的宏类似,$n只是简单的替代,  $n$m可组合为一个参数:)
    变量赋值"="左右不能有空格
5.通配符:
    *         匹配多个字符
    ?        匹配一个字符
    [charset]    匹配charset中的字符,如[0123456789]匹配一个数字0123456789,还可写成[0-9]
    [!charset]    取charset的补集作为匹配集合
6.变量替换:
        ${parameter:-word}    若parameter为空或未设置,则用word代替parameter进行替换,parameter值不变
        ${parameter:=word}    若parameter为空或未设置,则parameter设为值word
        ${parameter:?message}    若parameter为空或未设置,则把message作为标准错误输出
        ${parameter:+word}    若parameter设置了,则用word代替parameter进行替换,parameter值不变
7.引用:
    关闭一个字符的特殊意义
    \
    ''
    ""
8.    if list1    ————————————>list1退出代码为0时为真
        then list2
    elif list3
        then list4
    else
        then list5
    fi

test expression = [expression] expression为test可理解的表达式
test可理解的表达式:
        -文件测试:检查文件是否满足某种特殊规则

            test option file     option如下图

 SHELL学习笔录_第1张图片

        -字符串比较:
            -z string  长度为0为真
            -n string  长度不为0为真
            string1 = string2
            string1 != sting2
        -数字比较:整数比较
            int1 option int2    option————>-eq,  -ne,  -lt,  -le,  -gt,  -ge
                                =     !=     <     <=    >     >=
        -复合表达式:
            ! 非
            -a  与st  if [ expression1 -a expression2 ]
            -o  或
9.
    case word in
        pattern1)
            list1;;
        pattern2)
            list2;;
        ...
    esac

10.
    while command    ——————> 为0时为真
    do
        list
    done
11.   
    until command
    do
        list
    done
12.数组
    下标使用数字,自增应该如此:index=$(expr $index + 1),expr不可少,“+”两边要空格
    要应用数组中元素值是,应如此:${array[$index]},花括号不可少
    列出数组中所有元素:echo ${arrar[*]}
13.字符处理
    截取:
    expr substr “$var” 1 2  从第一个字符开始截取变量var的2个字符
    var2=·expr substr “$var” 1 2· 把截取的字符赋值给变量
   
   
======================================AWK====================================================
1.awk程序:模式+操作
    pattern {action}
    pattern
        {action}
    pattern缺省:action应用在每条输入记录
    action缺省 :打印匹配记录到标准输出
   
    2中特殊pattern:
        BEGIN:与之关联的操作只执行一次,执行在任何命令行文件或一般命令行赋值被处理之前,任何开头的-v选项指定完成之后;多用于初始化
        END  :与之关联的操作只执行一次,执行在所有输入数据处理完之后;多由于产生摘要报告或做清理工作
2.常用的内建变量:
    ARGC        参数计数
    ARGV        参数向量,或参数值
    FILENAME    当前输入文件的名称
    FNR        当前输入文件的记录数
    FS        字段分隔字符(正则表达式,默认为" ")
    NF        当前记录的字段数
    NR        在工作(job)中的记录数
    OFS        输出字段的分隔字符,默认为" "
    ORS        输出记录的分隔字符,默认为"\n"
3.数组变量:
    下标可以是任意数字或字符串表达式,不一定要整数
4.命令行参数:
5.记录:
    空行也可以是一条记录
   
   
=====================================SED=====================================================
1.sed调用
    sed [option] sed命令 输入文件
    sed [option] -f sed脚本文件 输入文件
    sed脚本文件 [option] 输入文件
        option:
                        -n    不打印编辑行
                        -p     打印   
                        -c    下一命令是编辑命令   
                        -f    执行sed脚本时使用
2.定位文本(address)
    sed浏览输入文件时,默认是从第一行开始,如下可以定位文本:
    1).使用行号:
            n            第n行
            n,m        第n行-第m行(包括行m)
            n,m!    行号部位n和m的行
            1,$    第一行-最后一行
    2).使用正则表达式:
            /pattern/                包含模式的行
            /pattern1/pattern2/        包含两个模式的行
           
            pattern/,n                指定行上包含模式的行
            n,/pattern/                ??
3.sed编辑命令:
        p        打印匹配行
        =        显示行号
        a\        在定位行号后附加信息
        i\        在定位行号后插入信息
        d        删除定位行
        c\        替换
        s        模式匹配替换
        r        从另一文件中读取文本
        w        写文本到文件
        q        退出
        l        显示控制字符
        {}
        n
        g        全局
        y
        n
        ^        行首开始
       
       
        实例:sed '/sdd/=' test.txt                             打印test.txt的所有内容,并显示匹配'sdd'行的行号
              sed -n -e '/sdd/p' -e '/sdd/=' test.txt            仅打印匹配模式的行,并显示行号,两个e都不能少

4.插入文本

5.修改文本
        格式:[address[,address]] c\    text           
        功能:将定位行替换为text
       
        格式:[address[,address]] i\    text           
        功能:在定位行前插入行text

        格式:[address[,address]] a\    text           
        功能:在定位行后追加行text
       
6.删除文本
        格式:[address[,address]]d
        功能:删除定位行

7.替换文本
        格式:[address[,address]] s/pattern_to_find/replacement_pattern/[g p w n]
        功能:
                     g: 缺省下是替换第一次模式匹配的,用g可用于全局的模式匹配
                     p: 缺省下打印所有替换行,用p可以使-n选项无效
                     w: 写入指定文件
                     n:
                     &: 代表原模式
        实例:
                     sed -n 's/aaa/ccc &/p' test.txt                        模式aaa前追加ccc
                    sed -n 's/aaa/& ccc/p' test.txt                        模式aaa后追加ccc
8.读写文件
        格式:[address[,address]]w filename
        功能:将定位行写入文件filename
       
        格式:address r filename
        功能:将文件filename的内容追加在定位行后       
       
实例:
            sed '/^$/d' filename                     删除空行
            sed 's/^[0-9]//g' filename        去除行首数字

你可能感兴趣的:(shell,sed,awt)