shell总结

Posted x10011314xxx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

 

以上是关于shell总结的主要内容,如果未能解决你的问题,请参考以下文章

BootStrap有用代码片段(持续总结)

BootStrap实用代码片段(持续总结)

回归 | js实用代码片段的封装与总结(持续更新中...)

用于确保在任何给定时间仅运行一个 shell 脚本的 shell 片段 [重复]

shell 脚本 片段

vue2.0 代码功能片段