码迷,mamicode.com
首页 > 系统相关 > 详细

Linux中bash中的几种基础特性汇总!

时间:2016-04-13 00:47:18      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:bash的基础特性

    首先需要知道什么是shell?如果将Linux内核当作一个地球的核心,那么shell就是地壳。shell本身也是一个应用程序,为我们提供了使用系统的接口。shell程序有很多种,目前主流发行版大多数默认使用bash,其次还有sh,tcsh,csh,fish等,其程序存储在/etc/shells目录下。

    由于目前最常用的bash,所以就以bash为例来说一说bash的基础特性,偷偷说一句,其实我也是个新手,其他的shell并未接触,不敢轻易去说,当然本文中难免有错误,还请各位不吝赐教,让大家共同进步。

 bash的基础特性之:命令历史

        history命令:记录当前用户的使用过的命令的历史记录。可通过手动设置环境变量来定制        history的功能;

        HISTSIZE:shell进程可保留的命令历史的条数,默认是1000条。

        HISTFILE:持久保存命令历史的文件,其路径在每个用户的家目录下面的.bash_history里面。

        HISTFILESIZE:设置~ USERNAME/.bash_history保存的命令的条数,默认是1000条。

        HISTCONTROL:控制命令历史记录的方式,有三种方式:    

            1.ignordeups:忽略重复的命令

            2.ignorespace:忽略以空白字符开头的命令

            3.ifnoreboth:以上两者同时生效

    其命令的用法为:

~]# history [option]
    history -anrw [FILENAME]
    history -ps [参数][参数...]

    其option主要有以下几种:

        -c 清空命令历史记录

        -d offset(偏移量) 删除指定命令历史记录

        -r 从文件读取命令历史记录到历史列表中

        -w 把历史列表中的命令追加到历史文件中

        history # 查看指定的第#条历史命令 

     调用命令历史列表中的命令:

        !# 再次执行第#条命令

        !! 再次执行上一条命令

        !STRING 再次执行最近一个以STRING开头的命令

      调用上一条命令的最后一个参数:

          快捷键:先按ESC键后,在按.键

          也可以直接输入:!$调用上一条命令的参数


  bash的基础特性之:

        命令补全:shell程序在接收到用户执行命令的请求,分析完成之后,最左侧的字符串会被当作      命令处理机制:先查找shell内嵌命令,如果没有则根据PATH环境变量中设定的目录,从左到右逐      个搜索目录下的文件名,直到给定的打头字符串能够唯一标识某命令程序文件,则按一次tab键补      全;若仅不能唯一标识,则按两次tab键列出命令列表;否则无反应。

         路径补全:根据给定的起始路径,以对应的路径下的打头字符串来逐一匹配起始路径下的每个      个文件,该打头字符串能够唯一标识,则按一次tab键直接补全,如果仅不能唯一标识,则给出所      有符合条件的命令列表,否则无反应。

         这里介绍两个目录管理类的命令:mkdir和rmdir

            mkdir:创建目录,其格式为:

                mkdir [OPTIONS] ... DIRECTORY

                OPTINOS主要有以下几种:

                    -p 自动按需创建目录,如果上级目录不存在会自动创建。

                    -v verbose,显示创建的详细过程。

                    -m MODE 创建目录时直接给定权限,否则默认权限。

            rmdir:删除目录,其格式为:

                rmdir [OPTIONS] ...DIRECTORY...

                    -p 删除目录后,如果目录为空,则一般删除,直到父目录不为空为止,危险慎                          用。

                    -v verbose,显示删除的详细过程。


  bash基础特性之:命令hash

        前面说到命令补全机制,Linux在每次搜索命令都是需要消耗一定的时间的,虽然每次进行的时

     间很短,但是积少成多,因此就有了hash表,来缓存此前 使用过的命令。

        hash主要命令:

            hash ;列出

            hash -d COMMAND 删除

            hash -r 清空


 bash基础特性之:命令行展开    

            ~ USERNAME:自动展开用户家目录,或指定的用户的家目录.

            {}:可承载一个以逗号分隔符的路径列表,并能够将其展开为多个路径,例如/tmp/{a,b}相                当于/tmp/a /tmp/b。

        这里介绍一个查看目录结构的命令:tree命令

             tree [OPTIONS] [DIRECTORY]

                    -L level指要显示的目录的层级


  bash的基础特性之:命令的执行状态结果

        bash通过状态返回值来输出此结果,成功为0,失败为1-255,可以通过$?命令来查看上一命令      的状态返回值,进而确定命令的执行状态结果。

        引用命令的执行结构有两种方式:$(COMMAND)或者`COMMAND`. 

  

  bash的基础特性之:引用

        强引用:‘‘变量引用不能被替换

        若引用:""变量引用可以被替换

        命令引用:``


  bash的基础特性之:快捷键

        Ctrl+a:跳转至命令行的行首

        Ctrl+e:跳转至命令行的行尾

        Ctrl+u:删除行首至光标所在处之间的字符

        Ctrl+k:删除光标所在处到行尾之间的字符

        Ctrl+l:清屏


  bash的基础特性之:文件名通配globbing

        *:表示匹配任意长度的任意字符的,例如p*表示所有p开头的字符

        ?:表示匹配单个任意字符,例如p?表示p开头的所有两个字符

        []:匹配指定范围内的任意单个字符,有几种特殊格式:

            [a-z]、[A-Z]、[a-z0-9]不区分大小写

            [[:upper:]]表示所有的大写字母

            [[:lower:]]表示所有的小写字母

            [[:alpha:]]表示所有的字母

            [[:digit:]]表示所有的数字

            [[:almun:]]表示所有的字母和数字

            [[:space:]]表示所有的空白字符

            [[:punct:]]表示所有的标点符号

        [^]表示匹配指定范围外的任意字符

            例如[^0-9]表示除0-9以外的任意字符


  bash的基础特性之:IO重定向及管道

            可用的输入的设备:文件(对Linux而言,一切皆文件)包括键盘设备,文件系统上的

        常规文件,网卡等。

            可用的输出的设备:文件,包括显示器,文件系统上的常规文件,网卡等。

        程序的数据流有三种:

            输入的数据流:标准输入(stdin),标准设备是键盘

            输出的数据流:标准输出(stdout),标准设备是显示器

            错误输出流:错误输出(stderr),标准设备是显示器

        fd:file derscriptor,文件描述符:

            标准输入:0

            标准输出:1

            错误输出:2

        IO重定向:

            输出重定向:>,覆盖输出,直接覆盖原文件,例:cat /etc/issue > /dev/sda 此命令非         常危险,可能会干掉硬盘,在dev设备文件下进行操作时一定要注意。

            输出重定向:>>,追加输出,在文件的尾部新增。

            这里可以使用set命令来设置或撤销选项的值或位置参数,set -C:禁止覆盖输出至已存在

         的文件,此时可以使用>|强制覆盖输出。set +C:关闭上述特性。

            错误输出流重定向:2>,2>>

            合并正常输出流和错误输出流有两种方式:1、&>,&>>,2、COMMAND > /PATH/TO/SOMEFILE         2&>1或者COMMAND >> /PATH/TO/SOMEFILE 2&>1。

            tr命令:

                tr [options]...SET1 [SET2]

                    说明:把输入的数据当中的字符,范式在SET1定义范围类出现的,通通对位转换

                为SET2出现的字符。

                    用法一:tr SET1 SET2 </PATH/FROM/COMEFILE

                            tr [a-z] [A-Z] < /etc/issue

                    用法二:tr -d < /PATH/PROM/SOMEFILE

                <<:here document此处创建文档

                    cat << EOF 内容 EOF

                    cat > /PATH/TO/SOMEFILE <<EOF 内容 EOF

               管道:连接程序,实现将前一个命令的输出直接定向后一个程序当作输入数据流

                COMMAND1 | COMMAND2 |COMMAND3

                    这里有一个不得不说的命令:tee

                        COMMAND1 | tee /PATH/TO/SOMEFILE | COMMAND2

                    Linux的重要哲学思想之一:组合小程序,完成复杂的任务。   

 

  bash基础特性之:变量

        我们说程序是由指令+数据组成,这里的指令是由程序文件提供,数据由IO设备、文件、管道、     变量等提供,我们也说程序是由算法及其算法所决定的数据结构组成。不管哪种方式,都离不开

     数据,但是在程序中,数据是不可能一成不变的,这就有了变量。什么是变量名呢?变量名就是

     指向内存空间的某段起始位置。

            变量赋值:name=value

            变量类型:存储格式、表示数据范围以及能够参与的运算

                编程语言:

                    强类型编程:严格定义了数据的类型,并且要事先声明,有的编程语言还要事先

                         赋值。如C,JAVA

                    弱类型编程:不用严格区分数据类型,bash

                        bash把所有的字符串统统视为字符型,在进行运算时自动转换成数值型,不

                    支持浮点数,除非进行外在工具。

                        bash中的变量无需事先声明,相当于把声明和赋值过程同时实现。

             变量替换:把变量名出现的位置替换为其所指向的内存空间的数据。

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

             变量名:只能包含数字,字母和下划线且不能以数字开头,变量名的命名法则:见名知意

                    命名机制遵循某种法则,不能使用程序的保留字符技术分享if,while,else...

             bash的变量类型:

                    本地变量:作用域为当前shell;

                        变量赋值:name=value

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

                         查看变量:set命令

                        撤销变量:unset name;此处非变量引用,不用加$

                    环境变量:作用域为当前shell及其子shell进程;

                        变量赋值:export name=value

                               或 declare -x name=value

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

                        bash内嵌了许多环境变量,通常为大写字符,用于定义bash的工作环境,如

                        PAHT,HISTSIZE,HISTFILESIZE,HISTFILE,HISTCONTROL,SHELL,HOME,UID,PWD,

                        OLDPWD...

                        查看环境变量:export或declare -x或printenv或env

                        撤销环境变量:unset name

                     局部变量:作用域仅为某代码片段(函数上下文)

                     特殊变量:shell内置的有特殊功用的变量。

                      只读变量:1、declare -r name 或readonly name只读变量无法重新赋值,并且

                                不能撤销,存活时间为当前shell进程生命周期,shell进程的终止

                                而终止。

         

  bash特性之多命令执行:

            ~]# COMMAND1;COMMAND2;COMMAND3;...

逻辑运算:

运算数:真(true,yes,on,1)

假(false,no,off,0)

与:

1&&1=1 

1&&0=0 

0&&1=0 

0&&0=0 

1||1=1 

1||0=1 

0||1=1 

0||0=0 

!0=1 

!1=0

短路法则:

~]# COMMAND1 && COMMAND2 

COMMAND1为"假",则COMMAND2不会执行

否则,COMMAND1为“真”,则COMMAND2必须执行

~]# COMMAND1 || COMMAND2

COMMAND1为“真”,则COMMAND2不执行,否则

COMMAND1为“假”,则COMMAND2必须执行

示例:id $username || useradd $username


                       



本文出自 “小憩清风” 博客,请务必保留此出处http://xiaoqiqingfeng.blog.51cto.com/3720264/1763057

Linux中bash中的几种基础特性汇总!

标签:bash的基础特性

原文地址:http://xiaoqiqingfeng.blog.51cto.com/3720264/1763057

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!