Shell基础命令

shell内置计算命令:

        expr命令:整形、字符串

                        整形:

                        expr 运算表达式        (表达式各元素需空格隔开,部分运算符需转义)

                        字符串:

                        expr lenth 字符串:求字符串的长度

                        expr substr 字符串 start end:截取字符串

                                start:截取起始位置,从1开始

                                end:截取结束位置,包含该位置

                        expr index 字符串 需定位字符:找出指定字符第一次出现在字符串的位置

                        expr match 字符串 正则表达式:通过正则表达式匹配字符

                                等价于:expr 字符串:正则表达式

        (( ))命令:双小括号,进行整数运算

                ((表达式)):有无空格隔开都可以,符号也不需要转义

                        在运算后可在括号内进行赋值:((新变量名=运算表达式))

                        也可用$读取运算结果后在赋值,新变量名=$((运算表达式))

                        可同时操作多个运算表达式:((表达式1 ,表达式2,...))        逗号隔开

        let命令:整形运算(常用于运算后赋值给新变量)

                 let命令仅能用于赋值计算,不能直接输出,也不可用于条件判断(与(())的区别)

                let 赋值语句        等价于(( 表达式 ))

                同时操作多个语句时,使用空格隔开:let 赋值运算语句1   赋值运算语句2  ... 

        $[ ]命令:只能对单个表达式求值和输出

       各命令优缺:

                expr :直接输出,但表达式各元素需空格隔开,部分操作符需转义,只能执行单表达式

                             表达式里面引用变量需使用$

                (( )):可直接使用变量名,字符不需要转义,可执行多个表达式,结果不能直接输出

                          需被取值后,才可输出

                let:赋值简单(常用),字符不需要转义,但不能直接输出,不能用于条件判断

                $[ ]:字符不需要转义,但只能执行单个表达式

计算命令bc:简单的计算器

        互动式的数学运算:

       bc命令:可进行进制转换和计算(二、八、十、十六)

                        可进行整形运算,也可进行浮点运算(加减乘除、指数、余数等)

        语法:bc 操作选项  参数

                输入 quit 退出bc命令

                操作选项:

                        -h:帮助信息,可显示各操作选项对应的功能说明

                        -l:使用标准数学库。eg:内置函数的使用

                        -q:不显示欢迎信息(默认执行bc命令时出现,可通过此取消)

                参数:

                        可以是一个包含许多计算表达式(一个表达式一行)的文件

                内置变量:(进入bc后使用)各内置变量之间用 ; 隔开,最后输入数字

                        scale:指定计算结果保留的小数位,默认为0        scale=数字

                        ibase:指定输入数的进制,默认十进制        ibase=数字        

                        obase:指定输出数的进制,默认十进制        obase=数字

                        . 或  last:最近打印结果的数字

                内置函数:(进入bc后使用)

                        s(弧度x):计算弧度x的正弦值

                        c(弧度x):计算弧度x的余弦值

                        a(弧度x):计算弧度x的正切值

                        l(x):计算x的自然对数

                        e(x):e的x次方

                        j(n,x):计算从n到x的阶数

        shell中非互动式的管道运算:借助管道符 | 

                echo  "表达式"  |  bc  操作选项

                表达式必须符合bc命令要求,且里面可用 $引用shell的变量

                 将bc的计算结果赋值给shell变量:

                        1、反引号 ` `:变量名= ` echo  "表达式"  |  bc 操作选项 `

                        2、$(echo  "表达式"  |  bc 操作选项)

               区别:

                        反引号 ` `:所有linux系统支持,兼容性好,但易混淆单引号 ' ' 

                        $( ):兼容性较差,但不同意混淆

        shell中非互动式的输出重定向运算:使用 <<将表达式输入到bc中去执行

               1、反引号 ` `

                变量名=` bc 操作选项 <<EOF

                        第一行表达式

                        第二行表达式

                        ...

                       EOF

                        `

                2、$( )

                变量名:$(bc 操作选项 <<EOF

                        第一行表达式

                        第二行表达式

                        ...

                        EOF

                        

                PS:类似文件流的输入,EOF仅是自定义始末标识符,可任意,但前后需一致

流程控制语句:

        if else语句:

               1、只有if:

                        if 条件

                        then 

                                命令...

                        fi

                2、if else:

                        if 条件

                        then 

                                命令

                        else 

                                命令

                        fi

                3、if elif else:

                        if 条件1

                        then

                                命令1

                        elif 条件2

                        then 

                                命令2

                        else 

                                命令N

                        fi

                也可一行写完,各语句用 ;隔开  :if 条件;then 命令;fi

        条件语句运用test内置命令:功能同 [ ]一致

               对整形、字符、文件三方面操作

        case语句:分支判断

                case 值 in  匹配选项

                匹配1)

                        命令...

                       ;;                        ( 以俩个分号作为匹配项命令的结束)

                匹配2)

                        命令...

                        ;;

                *)                                   (*表示通配,相等与其它语言case的default)

                        命令...

                        ;;

                esac

                可做条件匹配的正则表达式:

                *:任意都匹配

                [abc]:a、b、c当中任意一个

                [m-n]:从m到n的任意字符,表示一个范围

                |(或):多重选择

        while语句:条件为false才退出循环

                while 条件        (条件为 :或true时,死循环,快捷键ctrl+c退出)

                do

                        命令1                (continue,break 同其它语言功能一样)

                        命令2...

                done

                单行格式:while 条件;do 命令;done

        until语句:相反的while,条件为true才退出循环

        for语句:

                1、

                for  循环变量 in 枚举值                 (枚举值决定循环次数,空格隔开)

                do

                        命令...

                done

                单行写法:for 循环变量 in 枚举值;do 命令;done;

               2、

                for 循环变量 in {start..end}           {整形1..整形2}:{ } 和 .. 为固定格式 ,表示范围

                do 

                        命令

                done

                单行写法:for 循环变量 in { start..end};do 命令;done;

                3、同其它语言类似,但需要俩个 ()

                for((循环变量=start;条件语句;循环变量变化语句))

                do

                        命令

                done

                单行写法:for((循环变量=start;条件语句;循环变量变化语句));do 命令;done;

        select语句:shell独有,用来增强交互性,常搭配case使用

                select默认是死循环,输入空值或无效值都不会退出,

                只有遇到break或快捷键 Ctrl+ d 才会退出

                1、

               select 循环变量 in 枚举列表

                do 

                        命令

                done

                2、搭配case使用

                select 循环变量 in 枚举列表

                do

                        case $循环变量 in

                        枚举1)

                                        命令...

                                        ;;

                        枚举2)

                                        命令...

                                        ;;

                        *)

                                命令

                       esac

                done

shell函数:

       系统函数:        

                1、basename:获取文件名

                        basename 文件路径 后缀  (后缀可选择删除提取的文件后缀)

                2、dirname:去除文件名,获取文件前缀路径

                        dirname 文件绝对路径

        自定义函数:

              函数名()  

                {

                        命令...

                        return 返回值        (不设置return,默认将最后一条命令状态码返回)

                }

       调用函数:

                函数名  参数1  参数2 ...        (参数空格隔开)

                        $#:获取传递参数个数

                        $* 或 $@:将所有参数组成一个字符串

                        $$:当前脚本运行的ID号

                        $@加双引号:获取所有参数,组成一个数组,每个参数为一个元素

                        $?:命令执行状态码

       shell程序(内部命令和外部脚本文件)和函数区别:

                shell程序包括内部命令和外部脚本文件,外部脚本文件在子shell中运行,会开启独立进程

                而shell函数在当前shell进程运行

shell重定向输入输出:覆盖>    追加>>

        标准输入:键盘输入

       标准输出:输出到显示器

        shell每个命令执行时都会打开三个文件:

                stdin:标准输入文件                

                stdout:标准输出文件

                stderr:标准错误输出文件

        三个文件的文件描述符发别为        0、1、2

        重定向:改变输入输出的方向,不在从键盘输出,不在输出到显示器

                作用:将命令结果输出到其它地方,可保存起来,随时查询

        语法:

        默认只会将正确的信息输出,输出错误信息需使用文件描述符

                命令>文件路径:正确信息覆盖方式输出到文件

                命令 >>文件路径:正确信息追加方式输出到文件

                命令<文件路径:从文件读取信息给命令

                命令<文件路径1>文件路径2:命令从文件1读取信息,将正确信息覆盖输出到文件2

                命令 文件描述符> 文件路径:指定文件类型覆盖输出到文件(可输出错误信息)

                命令 文件描述符>> 文件路径:指定文件类型追加输出到文件(可输出错误信息)

                        文件描述符 和> >> 中间不能存在空格        

        同从多个文件输入、输出,文件描述符和并:        

               PS:需要放在命令最后面,且描述符2需要在描述符1前面

                语法:命令 输入/输出方式 文件路径 合并的文件描述符

                文件描述符2>&文件描述符1:同时将正确信息和错误信息输出

                文件描述符2<&文件描述符1:同时从标准输出文件、标准错误输出中输入

                << 自定义标识符:读取自定义标识符中间的内容,自定义标识符前后需一致

shell工具:

        cut:切割提取指定列、字符、字节的数据

                cut 操作选项 文件

        操作选项:

                -f 提取范围:获取第几列

                -d 自定义分隔符:自定义分隔符,默认为制表符(以列提取才可用)

                -c 提取范围:以字符为单位分隔

                -b 提取范围:以字节为单位分割,可能将多字节字符割裂

                -n:常与-b使用,保留多字节字符的完整性

        提取范围:

                n-:提取n 列 /字节 /字符 后所有数据

                n-m:提取n列 /字节 /字符到m列 /字节 /字符的数据

                -m:提取开始到m列 /字节 /字符的数据

                n1,n2,...:提取n1,n2,...列 /字节 /字符的数据

        sed:流编辑器 (stream editor)

                非交互流式编辑器,一次处理一行内容,放入模式空间(缓存)。

                可对每一行数据增删查改等操作,可按行、字符、正则表达式匹配文本内容。

                语法:sed   操作选项   sed程序命令   文件

                操作选项:

                        -e:一条命令上执行多个sed程序命令时使用,

                        -i:对文件内容直接修改,默认不会修改原文件内容

                        -f:将执行结果另存到新文件中 

                        -n:取消默认输出文件内所有信息,只输出做了处理的行

                        -r:使用正则表达式时使用

                sed程序命令:

                        a:在匹配行的下一行新增内容

                                sed  ' 3a新增内容' 文件  :第三行后新增内容

                                sed ' /匹配内容/a内容'  文件:在匹配行后新增内容

                        i:在匹配行的前一行新增内容

                        c:修改匹配行的内容

                                sed ' 1c修改内容' 文件:将第一行修改为新内容

                                sed '/匹配内容/c修改内容' 文件:将有匹配内容的行全都修改

                                sed '$c修改内容' 文件:修改最后一行

                        s:替换行内匹配的内容,不匹配的不会变化(默认自会替换第一个)

                                sed 's/匹配内容/修改内容/2':将第二个匹配内容修改

                                sed 's/匹配内容/修改内容/g':将全部匹配内容修改

                                sed  's/$/& 拼接内容/'  文件:每行末尾拼接内容

                                sed 's/^/& 拼接内容/' 文件:每行行首拼接内容

                        d:删除匹配行

                                sed ' 1~2d'  文件  :从第一行开始隔俩行删除

                                sed '1,3d'  文件:删除第一到第三行

                                sed '! 1,3d' 文件 :除了第一到第三行,其余都删掉 

                                sed ' /匹配内容/d' 文件:删除有匹配内容的行

                        p:打印匹配行内容,常与  操作选项 -n 一起使用

                        =:打印匹配行的行号

                        n:直接读取下一行

                sed的模式空间和暂存空间(暂存空间开始只有空行)

                        h:模式空间内容覆盖到暂存空间

                        H:模式空间内容追加到暂存空间

                        g:暂存空间内容覆盖到模式空间

                        G:暂存空间内容追加到模式空间

                        x:交换俩个空间内容

                sed  '1h;$G'  文件:模式空间第一行覆盖到暂存空间,暂存空间内容追到模式空间

                sed '1{h;d};$G' 文件:模式空间第一行覆盖到暂存空间后删除,暂存空间内容追到模式空间

                sed '1,3H' 文件:模式空间第一到第三行追加到暂存空间

        awk:文本分析

                语法:  awk  '匹配模式{操作选项}'  文件

                操作选项:

                        -F:指定文件拆分的分隔符

                        -v:赋值一个用户定义变量

                awk内置变量:

                        FILE:文件名

                        NF:列号

                        NR:行号

                        $n:$0:整行信息  $1:第一列  $2:第二列        ...

                        $NF:最后一列

                匹配模式:

                        BEGIN:添加开头信息

                        END:添加结尾信息

        sort:排序

                sort 操作选项  参数

                        操作选项:

                                -n:按照数值大小排序(默认小到大)

                                -r:相反的规则排序

                                -t:设置排序划分列的分隔符

                                -k:指定排序的列

                                -d:排序结果输出到指定文件

                                -u:去除重复(必须放在操作选项最后)

                        sort -t " " -k2n,2 文件:将文件内容第二列按照数值大小排列

                        sort -t " " -k2n,2  -uk1,2 文件:将文件排序同时将文件第一列、第二列都相同的重复行去除,保留一行

                        

 

                        


版权声明:本文为m0_65213200原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。