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

原文地址:https://www.cnblogs.com/x10011314xxx/p/12318379.html