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