zoukankan      html  css  js  c++  java
  • shell脚本简介及常用文本编辑命令

    什么是脚本?

    脚本简单地说是一条条的文字命令(一些指令的堆积),这些文字命令是可以看到的,可以通过记事本打开和编辑

    为什么要学习和使用shell

    shell属于内置脚本

    程序开发的效率非常高,依赖于功能强大的命令可以迅速的完成开发任务(批处理)

    语法简单,代码写起来比较轻送,简单易学

    shell简介

    shell是一个C语言编写的脚本语言,它是用户与linux的桥梁,用户输入命令交给shell处理,shell将相应的操作传递给内核,内核把处理的结果输出给用户

    Linux 基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途。

    shell分类

    1:图形界面shell

    GUI shell 是为Unix或者类Unix操作系统构建的一个功能完善操作简单以及界面友好的桌面环境。

    2:命令行界面shell

    CLI是在用户提示符下键入可执行指令的界面,用户通过键盘输入指令,完成一系列操作。

    查看shell 

    shell是一个程序,一般放在/bin或者/user/bin目录下,当前linux系统可用的shell都记录在/etc/shells文件中。/etc/shells是一个纯文本文件,你可以在图形界面下打开它,也可以使用cat命令查看他。

    在现在的linux上,sh已经被bash代替,/bin/sh往往是指向/bin/bash的符号链接

    如果你希望查看当期那linux的默认shell,那么可以输出SHELL环境变量

    $ echo $SHELL
    /bin/bash

    输出结果表明默认的shell是bash

    SHELL是linux系统中的环境变量,他指明了使用的shell程序的位置,也就是使用的哪个脚本

    第一个shell脚本

    用vim打开test.sh

    #!/bin/bash
    echo "Hello world!"

    第一行是指定解释器,第二行是打印Hello World!

    写好后,有三种执行脚本的方法

    方法一:直接用bash解释器执行

    # bash test.sh
    Hello world!

    当前终端会新生成一个子 bash 去执行脚本。

    方法二:添加可执行权限

    # ll
    test.sh -rw-r--r--. 1 root root 32 Aug 18 01:07 test.sh
     # chmod +x test.sh
     # ./test.sh
    -bash: ./test.sh: Permission denied
    # chmod +x test.sh
    # ./test.sh
    Hello world!

    这种方式默认根据脚本第一行指定的解释器处理,如果没写以当前默认 Shell 解释器执行。

    注意,这里在运行时一定要写成 ./test.sh(绝对路径亦可),而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,Linux 系统会去 PATH(环境变量) 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

     方法三:source命令执行,以当前默认shell解释器执行

    # source test.sh
    Hello world!

    三种方法的区别:

    当shell脚本具有可执行权限时,用bash与绝对路径执行脚本是没区别的。绝对路径是因为当前目录没在PATH中,所以用"."是用来表示当前目录的

    source这个命令其实只是简单地读取脚本里面的语句一次在当前的shell里面执行,没有建立行的子shell。那么脚本里面所有的新建、改变变量的语句都会保存在当前的shell里面

    bash重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell

    shell编程的几个常用命令

    grep命令详解

    过滤来自一个文件或者面准输入匹配模式的内容

    除了grep外,还有egrep。egrep是grep的扩展,相当于grep -E 

    grep常用选项

        选项             

                      描述                                     

    -E,--extended-regexp                                

    模式是扩展正则表达式(ERE)                                

     -i,--ignore-case

    忽略大小写

     -n,--line-number

    打印行号

     -o,--only-matching

    只打印匹配的内容

     -c,--count

    只打印每个文件匹配的行数

     -B,--before-context=NUM

    打印匹配的前几行

     -A,--after-context=NUM

    打印匹配的后几行

    -C,--context=NUM

    打印匹配的前后几行

    --color[=WHEN],

     匹配的字体颜色

    -v,--invert-match

     打印不匹配的行

    cut命令

    使用说明:

    cut命令从文件的每一行剪切字节,字符和字段并将这些字节,字符和字段写至标准输出

    如果不指定file参数,cut命令将读取标准输入

    常用参数:

    -c:以字符为单位进行分割

    -d:自定义分隔符

    -f:与-d一起使用,指定显示哪个区域

    [root@ken ~]# echo "this is ken" | cut -c  4
    s
    [root@ken ~]# echo 'this is ken' | cut -d' ' -f3
    ken

    sort命令

    sort命令用于将文本内容加以排序

    sort可针对文本文件的内容,以行为单位来排序

    常用参数说明:

    *  -n:依据数值的大小排序(默认是根据字符进行排序)

    *  -r:以相反的顺序来排序

    *  -u:去除重复的行(只要那个指定的字段重复,就认定是重复的行)

       -t:<分隔符号>指定排序时所用的栏位分割字符

       -k:根据切割后的那一段进行排序

    uniq命令

    作用:去除重复的行(相邻且相同,认定为重复)

    选项:

      -c:在首行用数字表示该行出现了多少次

      -u:仅仅显示那些没有出现重复过的行

    seq命令

    作用:生成一个数组序列

    [root@ken ~]# seq 5       #终止位5
    1
    2
    3
    4
    5
    [root@ken ~]# seq 2 5     #起始位2,终止位5
    2
    3
    4
    5
    [root@ken ~]# seq 2 2 10  #起始位2,步长为2,终止位10
    2
    4
    6
    8
    10

    tr命令

    作用:突然命令用于转换或者删除文件中的字符

    tr指令从标准输入设备读取数据,经过字符串转义后,将结果输出到标准输出设备

    a-z  任意小写

    A-Z  任意大写

    0-9  任意数字

    替换实例:

    [root@ken ~]# echo "this is ken" | tr a-z A-Z
    THIS IS KEN
    [root@ken ~]# echo "THIS IS KEN" | tr A-Z a-z
    this is ken

    删除特定字符串实例:

    [root@ken ~]# cat test
    6 this:is:ke3
    2 this:is:ke4
    2 this:is:ke4
    2 this:is:ke4
    2 this:is:ke4
    5 this:is:ke2
    6 this:is:ke1
    1 this:is:ke6
    8 this:is:ke7
    [root@ken ~]# cat test | tr -d 's'
    6 thi:i:ke3
    2 thi:i:ke4
    2 thi:i:ke4
    2 thi:i:ke4
    2 thi:i:ke4
    5 thi:i:ke2
    6 thi:i:ke1
    1 thi:i:ke6
    8 thi:i:ke7
  • 相关阅读:
    SharePoint 2010 User Profile Sync Service自动停止
    如何区别多个svchost.exe?
    Log Parser分析IIS log的一个简单例子
    Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
    Windows中右键点击文件夹, 结果找不到共享选项卡, 怎么办?
    介绍SOS中的SaveModule命令
    SharePoint中Draft版本的文档不会收到document added的Alert Email
    和我一起学Windows Workflow Foundation(1)创建和调试一个WF实例
    门户网站
    C#基础—— check、lock、using语句归纳
  • 原文地址:https://www.cnblogs.com/it-ljm1903/p/10867321.html
Copyright © 2011-2022 走看看