zoukankan      html  css  js  c++  java
  • shell总结

        

    shell总结

    一.学习心得

      在学习本阶段shell这一课程时,我对shell有了一个大概的了解。

    shell是一门解释性语言,shell语言与高级语言处理的对象不同;它与系统

    有着密切的关系,易编写、调试、灵活性较强,但速度低。

      既然是心得,那我在这里想说一些心里话。这是我来景航的第n个月

    在这n个月中一路磕磕绊绊还是走了过来,不过让我最伤的是我竟然仅仅

    在Java   web第二阶段就摔了两次在分班考试前我揪心的很,俗话说一个

    人不能在同一个地方摔倒三次这也是我心中所担心的。哈哈废话不多说我

    还记得我在之前也打听过大数据阶段超级难学,当我真正开始接触Linux的

    时候我感觉没什么,但是自从开始学习shell的时候发现并不是那么容易。

    我呀不爱说话学习方面一般不敢和别人主动去沟通,哪怕是不会也不愿意

    去问老师同学有时候想问却不敢因为我怕别人笑话我。说实话我感觉整体

    学习效果并不是太好!能力有待提升。

    二.介绍shell

      在计算机科学中,shell俗称壳(用来区别于核),是指"为使用者提

    供操作界面"的软件(命令解析器)。简单说就是指shell是一个命令解析

    器。同时它又是一种程序设计语言。

    三.shell的使用场景

      1.作为监控脚本,采集系统或者业务指标,将数据发送到监控服务

    器,如网络指标,业务 QPS

      2.数据备份,如MySQL数据定时备份

      3.定时任务,如凌晨1点数据同步

      4.批处理,如同时更改所有服务器密码

      5.服务部署,如自动部署MySQL,nginx环境

      6.基础环境设置,如服务器刚上架时,根据一定规则设置网络,防

    火墙,主机名等

      7.服务管理,服务的启动,停止,进程检测

    四.分别介绍所学的每一块儿内容

     1.shell解析器

          •  如何查看解析器(命令):   cat  /etc/shells
            •  解析器:
              • /bin/sh:           是bash的一个快捷方式;
              • /bin/bash:       bash是大多数Linux默认的shell,包含的功能几乎可以涵盖shell所有的功能;
              • /sbin/nologin: 表示非交互,不能登录操作系统;
              • /bin/dash:       小巧,高效,功能相比少一些;
              • /bin/tcsh:        具有c语言风格的一种shell,具有许多特性,但是也有一些缺陷;
              • /bin/csh:         是csh的增强版本,完全兼容csh;
            •  bash和sh的关系:
              • 命令:ll | grep bash
              • sh最终指向的是bash,可见两者关系为软连接;
            • Centos默认的解析器是bash
                • 命令:echo $SHELL         

      2.变量

      1.变量即在程序运行过程中它的值是允许改变的量

         2.变量是用一串固定的字符来表示标示不固定的值的一种方法

         3.变量是一种使用方便的占位符,用于引用计算机内存的地

         址,该地址可以存储Script运行时可更改的程序信息

         4.在shell中变量是不能保存在系统中的,必须在文件中声明

         在shell脚本中变量的种类

         (1)在shell中变量分为环境级变量,用户级变量,系统级变

             量

         (2)环境级变量只在当前shell中生效,shell关闭丢失

         (3)用户级变量写在用户的骨文件中,只针对当前用户生效

         (4)系统级变量被写在系统的配置文件/etc/profile或者

             /etc/profile.d/中,对于所有用户都生效

      系统变量:

       $HOME、$PWD、$SHELL、$USER

      自定义变量:

       1.基本语法:

        (1)定义变量:变量名=变量值

             (2)撤销变量:unset变量名

                  (3)声明静态变量:readonly 变量,注意:不能unset

       2.变量定义规则:   

           (1)变量名称可以由字母、数字和下划线组成,但

               是不能以数字开头,环境变量名建议大写。

             (2)等号两侧不能有空格

                (3)在bash中,变量默认类型都是字符串类型,无法

              直接进行数值运算。

             (4)变量的值如果有空格,需要使用双引号或单引号

              括起来。

            特殊变量:

              $n:    n为数字,$0代表该脚本名称$1-$9代表第一到第九个参数,十以上的参数,十以

               上的参数需要用大括号包含,如${10}

              $#:    功能描述:获取所有输入参数个数,常用于循环

               $*: 功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体

            $@:  功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待

            $?: 功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令

               正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个

               命令执行不正确了。

     3.数组

      基本语法:  

          Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:

          方式2: arr=(value1 value2 value3)   (这种方式带值)

     4.运算符  

      基本语法:

       (1“$((运算式))”“$[运算式]”  + , - , *,  /,  %    加,乘,除,取余

          (2expr  + , - , *,  /,  %    ,乘,除,取余

          注意:expr运算符间要有空格

     5.条件判断

      基本语法:

          [ condition ]注意condition前后要有空格

          注意:条件非空即为true[ jinghang ]返回true[] 返回false

       常用判断条件:

          (1两个整数之间比较

            = 字符串比较    -lt 小于(less than)

            -le 小于等于less equal)-eq 等于(equal)

            -gt 大于(greater than)-ge 大于等于greater equal)

            -ne 不等于(Not equal)

          (2按照文件权限进行判断

           -r 有读的权限read -w 有写的权限write

           -x 有执行的权限(execute)

          (3按照文件类型进行判断

            -f 文件存在并且是一个常规的文件file

            -e 文件存在(existence) -d 文件存在并是一个目录(directory)

     6.流程控制

      if 判断:

      基本语法:

            if [ 条件判断式 ];

              then

                 程序

              fi

               或者

            if [ 条件判断式 ]

               then

                  程序

            elif [ 条件判断式 ]

            then

               程序

              else

                 程序

              fi

     注意事项:

           (1[ 条件判断式 ],中括号和条件判断式之间必须有空格

           (2if后要有空格

      case 语句:

      基本语法:

           case $变量名 in

              "1"

                如果变量的值等于值1,则执行程序1

                ;;

              "2"

                如果变量的值等于值2,则执行程序2

                  ;;

               …省略其他分支

               *

             如果变量的值都不是以上的值,则执行此程序

               ;;

           esac

     注意事项:

          (1) case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。

          (2) 双分号;;”表示命令序列结束,相当于java中的break

          (3) 最后的*)”表示默认模式,相当于java中的default。

     for 循环

      基本语法:

          for (( 初始值;循环控制条件;变量变化 ))

           do

                程序

            done

          for 变量 in 1 2 3…

             do

                程序

            done

     while 循环:

      基本语法:

          while [ 条件判断式 ]

           do

              程序

           done

     7.read

     基本语法:

          read(选项)(参数)

     选项:

          -p:指定读取值时的提示符;

          -t:指定读取值时等待的时间(秒)。

     参数:

          变量:指定读取值的变量名

     8.函数

     系统函数

     basename基本语法:

          basename [string / pathname] [suffix]   (功能描述:basename命令会删掉所有的

          前缀包括最后一个(‘/’)字符,然后将字符串显示出来。

      选项:

          suffix为后缀,如果suffix被指定了,basename会将pathnamestring中的suffix去掉。

     dirname基本语法

          dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件

          名(非目录的部分),然后返回剩下的路径(目录的部分))

      自定义函数

     基本语法:

          [ function ] funname[()]

          {

          Action;

          [return int;]

          }

            funname

     经验技巧:

         (1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样

            先编译。

         (2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最

            后一条命令运行结果,作为返回值。return后跟数值n(0-255)

     

     9.shell工具

        cut

           cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一

           行剪切字节、字符和字段并将这些字节、字符和字段输出。

     基本用法:

          cut [选项参数]  filename

          说明:默认分隔符是制表符

     选项参数说明

         选项参数        功能      

           -f         列号,提取第几列  

          -d         分隔符,按照指定分隔符分割列

            -c          指定具体的字符

     sed

           sed是一种编辑器,它一次处理一行内容。处理时,把当前处

         理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令

         处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。

         接着处理下一行,这样不断重复,直到文件末尾。文件内容并

            没有改变,除非你使用重定向存储输出。

     基本用法:

         sed [选项参数]  ‘command’  filename

     选项参数说

         选项参数              功能

          -e      直接在指令列模式上进行sed的动作编辑(一次执行多个操作时)。

           -i      直接编辑文件

      命令功能描述

       命令               功能描述

          a        新增,a的后面可以接字串,在下一行出现

          d        删除

          s        查找并替换

       awk

         一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的

         部分再进行分析处理。

     基本用法

        awk [选项参数] ‘pattern1{action1}  pattern2{action2}...filename

        pattern:表示AWK在数据中查找的内容,就是匹配模式

        action:在找到匹配内容时所执行的一系列命令

     选项参数说

      选项参数       功能

        -F      指定输入文件折分隔符

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

       awk的内置变量

       变量        说明

       FILENAME      文件名

          NR        已读的记录数

          NF        浏览记录的域的个数

      sort

       sort命令是在Linux里非常有用,它将文件进行排序,并将排序结

       果标准输出。

     基本语法:

       sort(选项)(参数)

           选项          说明

          -n        依照数值的大小排序

          -r        以相反的顺序来排序

          -t        设置排序时所用的分隔字符

          -k        指定需要排序的列

            参数:指定待排序的文件列表

     

    五.罗列出你自己所练习的脚本

    1.

    #!/bin/bash
    num=$(awk 'BEGIN{sum=0}{sum+=1}END{print sum}' /root/class21/inittab.txt)
    echo $num
    if [ $num -gt 100 ]
    then
    echo "inittab is a big file."
    else
    echo "inittab is a small file."
    fi

    2.

    #!/bin/bash
    #NAME:test01.sh
    #DESC:第一个脚本任务
    #CREATETIME:2020-2-12 17:18
    #CREATE:xzy
    #PATH:/root/class22
    echo "libai"
    #echo "任务执行完毕 ~date "+%Y-%m-%d %H:%M:%S"~"

    六.总结shell的面试题

    1.每个脚本开始的 #!/bin/sh 或 #!/bin/bash 表示什么意思 ?

    这一行说明要使用的 shell#!/bin/bash 表示脚本使用 /bin/bash。对于 python 脚本,就是 #!/usr/bin/python

    2.如何获取文本文件的第 10 行 ?

    head -10 file|tail -1

    3. 命令 “export” 有什么用 ?

    使变量在子 shell 中可用。

    4."chmod 500 script" 做什么 ?

    使脚本所有者拥有可执行权限。

    5.">" 做什么 ?

    重定向输出流到文件或另一个流。

    6.bash shell 脚本中哪个符号用于注释 ?

    #

    7.如何使用 awk 列出 UID 小于 100 的用户 ?

    awk -F: '$3<100' /etc/passwd

    8.[ $a == $b ] 和 [ $a -eq $b ] 有什么区别

    • [ $a == $b ] - 用于字符串比较
    • [ $a -eq $b ] - 用于数字比较

    9.写出 shell 脚本中所有循环语法 ?

    for 循环 :
    for  i  in $(ls);do
    echo item:$i
    done
    while 循环 :
    #!/bin/bash
    COUNTER=0
    while [ $COUNTER -lt 10 ]; do
    echo The counter is $COUNTER
    let COUNTER=COUNTER+1
    done

  • 相关阅读:
    JVM heap中各generation的大小(Sizing the Generations)
    MySQL中分组取第一条, 以及删除多余的重复记录
    八芯网线水晶头做法(线序)
    Win7命令行下查看无线网络信息
    OpenWrt的开机启动服务(init scripts)
    犀牛书的实例代码:给对象添加freeze, hide, 查询descriptors
    ES6新特性:Javascript中Generator(生成器)
    ES6新特性:Function函数扩展, 扩展到看不懂
    ES6新特性:Javascript中的Map和WeakMap对象
    ES6新特性:Javascript中Set和WeakSet类型的数据结构
  • 原文地址:https://www.cnblogs.com/x10011314xxx/p/12318379.html
Copyright © 2011-2022 走看看