随笔

                    bash基础特性整理以及shell编程的思路整理    


  在linux的学习中,目前就学习到第六课时半天的时候发现在bash基础特性当中,使用不同的命令以及shell编程中,发现有很多的bash变量在不同的环境使用的方法都不一样,下面就结合第一节课到第6节课的bash特性进行整理如下:

    1,什么是bash:

     bash是许多Linux平台中内定的shell,bash脚本功能在处理自动循环或大的任务方面可以节省大量的时间

       以CentOS6为例:查看当前系统中有多少个bash:

        blob.png

   

     bash的分类:

        blob.png

    以上图可以看出在Linux中的bash可以大致可以分成2种,下面就详细介绍一下生效划分的bash与功能划分的bash的意义:

        生效划分的bash:

        blob.png

    功能划分的bash:

        blob.png


       bash中的变量的种类:

        根据变量的生效范围等标准:

         本地变量:生效范围为当前shell进程:对当前shell之外的其他shell进程,包括当前shell 的子shell不生效

         环境变量:当前shell进程及其子进程

         局部变量:生效范围为当前shell进程中某代码片段(通常指函数)

         位置变量:$1,$2,…来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数

       特殊变量:$?,$0,$*,$@,$#


    例1:history历史命令查看:

    blob.png

    history是否对其他用户进行生效呢?以wostop用户登录之后输入history命令:发现2个不同的用户登录使用history命令显示的结果是不同的

        blob.png

      按照bash所给的/etc/profile, /etc/porfile.d/*.sh ,~/.bashrc ,~/etc/bashrc,/etc/bash_profile查看发现 :在/etc/profile 下有关于histroy的配置变量:

        blob.png


       由于不同用户登录使用的命令是不一样的,就可以判定存储的histroy的bash存放在个人的bash中:

         blob.png

        上述解释了bash中有个人个全局的区别:

    本地变量:

    变量赋值:name='value'

        可以使用引用:

            value:(1)可以是直接字串:name="username"

                (2)变量引用:

                name="$sername"

                (3)命令引用:name=`COMMAND`,name=$(COMMAND)

    

            变量引用:${name},$name

"":弱引用,其中的变量引用会被替换为变量值;

    ‘’:强引用,其中的变量引用不会被替换为变量值,而保持原字符串;


            

                bash中的算术运算:

+ – * / %(取余数)**

实现算术运算:

(1)let var=算数表达式

(2)var=$[算术表达式]

(3)var=$(())

(4)var=$(expr args1 arg2 arg3…)


 


      各个通配符已经在shell编程,正则表达式的使用法以及区别:

        glob:bash中用于事先文件名"通配"

        blob.png

    bash的快捷键:

Ctrl+l:清屏,相当于clear命令;

Ctrl+a:跳转光标命令首部;

Ctrl+e:跳转至命令尾部;

Ctrl+c:取消命令执行;

Ctrl+u:删除命令行首至光标所在处的所有内容;

Ctrl+k:删除光标所在处至命令行尾部的所有内容;

    

    grep正则表达式:文本过滤工具(默认处于贪婪模式)

        –color=auto:对匹配到的文本着色显示:

   -v:反向显示:显示不能够被pattern匹配到的行;

   -i:匹配时忽略字符的大小写;

   -o:仅显示匹配到字符串;

   -q:检查匹配后不向屏幕输出:静默模式

   -A:after,后#行:-B:before,前#行;

   -C:context,前后各#行:

   -E:使用扩展的正则表达式

   -F:使用fegrp表达式

    GREP中的字符匹配,这里和glob的字符匹配有所不同:
        blob.png

       OK上述将grep与glob的相同且不同意义的字符做了对比:grep匹配次数的用法:

    .*:任意长度的任意字符:

    \?:匹配其前面的字符0次或1次,即前面的字符可有可无:

    \+:匹配其前面的字符至少1次:

    \{m\}:匹配前面的字符m次:

    \{m,n\}:匹配前面的字符至少m次,至多n次:

    \{0,n\}:匹配前面的字符至多n次:

    \{m,\}:匹配前面的字符至少m次:

  位置锚定:

    ^:行首锚定:例如^root

    $:行尾锚定:例如:root$

    ^$:空白行:

    ^[[ :space: ]]*$:空格字符

    \<或\b:词首锚定:用于单词模式的左侧:\<root

    \<或\b:词尾锚定:用于单词模式的左侧

    \<PATTERN\>:匹配整个单词

    分组:\(\):将一个或多个字符捆绑在一期,当作一个整理进行处理:

    

原创文章,作者:wostop,如若转载,请注明出处:http://www.178linux.com/21302

(0)
wostopwostop
上一篇 2016-07-07 10:48
下一篇 2016-07-07 10:48

相关推荐

  • 马哥教育网络班20期+第6周课程练习

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; sed -ri 's/^([[:space:]]+.*$)/#\1/' /tmp/rc.sysinit 2、复制/boot/grub/grub.conf至/tmp…

    2016-07-17
  • Linux进程及作业管理

    process 运行中的程序的一个副本,是被载入内存的一个指令集合 进程ID(Process ID,PID)号码被用来标记各个进程 UID、GID、和SELinux语境决定对文件系统的存取和访问权限, 通常从执行进程的用户来继承 存在生命周期 task struct:Linux内核存储进程信息的数据结构格式 task list:…

    Linux干货 2016-09-11
  • lnmp部署实验

    Lnmp部署 实验环境: 1、Centos 7主机一台,客户机一台。 2、在centos 7主机上部署:    Nginx  php-fpm  php-mysql  mariadb-server 实验步骤: 1、启动nginx服务,确保80端口打开,启动mariadb-server,确保3306端口…

    Linux干货 2016-10-30
  • linux权限管理

          今天来讲讲linux里面权限的问题,在linux系统中,有这么几类权限,r,w,x,s,t这么几类权限,系统中为什么要有权限这个东西呢,linux一切皆文件,有些文件不想让某些人看到,那么这个时候就需要设置文件的访问的权限了,文件的拥有者一般都是有权力修改删除文件的,但拥有者以外的人未必就能删除修…

    Linux干货 2016-08-04
  • 内核与内核模块

    内核与内核模块 先来看一下,内核与内核模块放在哪?这里以centos6为例 内核: /boot/vmlinuz或/boot/vmlinuz-version 内核解压所需要RAMDisk: /boot/initrc(/boot/initrc-version) 内核模块:/lib/modules/version/kernel或/lib/modules/uname…

    2017-09-04
  • Linux系统-动态库删除或破坏等,修复操作

    Linux,CentOS7,救援模式(Rescue a CentOS System),动态库(shared libraries)

    2018-04-20

评论列表(1条)

  • 马哥教育
    马哥教育 2016-07-07 11:18

    写的很好,排版还可以在漂亮一点,可以多画点图加深印象,加油