bash的基础特性:

            bashUnix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写。1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括LinuxMac OS X v10.4都将它作为默认shell。它也被移植到MicrosoftWindows上的CygwinMinGW,或是可以在MS-DOS上使用的DJGPP项目。在Novell NetWareAndriod在上也有移植。1990年后,Chet Ramey成为了主要的维护者。

            Bourne shell的后继兼容版本与开放源代码版本,它的名称来自Bourne shellsh)的一个双关语(Bourne again /born again):Bourne-AgainSHell

 

           

            Shell

                        GUI

                                    GNOME

                                    KDE

                                    XFCE

                        CLI

                                    狭义上的shell

                                    cat/etc/shells

                                                /bin/bash

                                                /bin/csh

                                                /bintcsh

 

                        /bin/bash

           

            终端:ternimal          

 

            (1) 命令历史

                        history

            (2) 命令别名

                        alias/unalias

            (3) 命令补全

            (4) 路径补全

            (5) 命令行展开

                        ~, {}

 

常用的基础命令:

            cd命令:change directory

                        cd [/PATH/TO/SOMEWHERE]

                        cd

                        cd ~: 回主目录

                        cd ~USERNAME:切换指定用户的家目录

                        cd -: 回到上一次所在目录

 

                        相关环境变量:

                                    PWD:

                                    OLDPWD

 

            pwd命令:printing workingdirectory

                        显示工作目录

 

            lslist

                        列出指定路径下的文件或目录的属性信息

 

                                    Metadata:属性数据

                                    data:数据

 

                        ls [OPTION]... [FILE]...

                                    -l: 使用长格式显示

                                                drwxr-xr-x1 root root    8 Aug 23 08:47 .cache

                                                            d:文件类型

                                                            rwxr-xr-x:权限,mode

                                                            1:文件被硬链接的次数

                                                            root:owner,属主;

                                                            root:group, 属组

                                                            8size,默认为字节

                                                            Aug23 08:47 修改时间戳

                                                            .cache:文件名

                                    -d:显示目录自身属性

                                    -h:human-readable

                                    -a:显示所有文件,包括.开头的隐藏文件

                                                .:当前目录

                                                ..:父目录

                                    -r: reverse,逆序显示

                                    -R: recusive,递归

 

            文本文件查看类的命令:

                        cat, tac命令:

                                    cat[OPTION]... [FILE]...

                                                -n

                                                -e:-vE

                                                            -E:显示行结束符

                                                            -v:显示非打印字符

 

            文件内容类型查看命令:

                        file /PATH/TO/SOMEWHERE

 

            回显命令: echo

                        echo [OPTION]...[ARGS]...

                                    -n: 不进行换行;

                                    -e:让控制符生效;

                                                \n:new line

                        echo"$VAR_NAME"

 

            命令路径位置查看工具:

                        whereis, which

 

                        which:

                                    which[options] [--] programname [...]

                                                --skip-alias:禁止列出别名

 

                        whereis COMMAND:

                                    显示二进制程序、源码文件以及帮助手册的路径;

 

            时间相关的命令:

                        RTCRealTime Clock

                        System Clock:系统时钟

 

                        date: 系统时间

                        clock, hwclock: 硬件时间

 

                        date

                                    date[OPTION]... [+FORMAT]:时间显示

                                                FORMAT

                                                            %F

                                                            %D

                                                            %T

                                                            %H

                                                            %M

                                                            %S

                        date[MMDDhhmm[[CC]YY][.ss]]:时间设置

 

            hwclock

                        -s:hctosys, 以硬件时钟为准,调整系统时间同硬件;

                        -wsystohc, 以系统时钟为准

 

            cal:

                        cal[YEAR]

 

    关机或重启

            关机:halt, poweroff,init 0, shutdown -h TIME

            重启:reboot, init 6,shutdown -r TIME

 

            shutdown

                        shutdown[OPTIONS...] [TIME] [WALL...]

                                    -r:重启

                                    -h:关机

                                    --no-wall

                                    -c

 

                        TIME:

                                    +m:相对时长之后执行相应操作;单位是分钟;

                                    HH:MM绝对时间

 

    stat

w,who, whoami

 

bash的基础特性(02)

        (1) glob

                    文本名通配

                                *:匹配任意长度的任意字符;

                                ?:匹配任意单个字符;

                                            a*b:aab, ab, a123b;

                                            a?b:

                                []: 匹配指定范围内的任意单个字符;

                                            [0-9]

                                [^]:匹配范围外的任意单个字符;

                                            [^a-b]

 

                                            字符集合:

                                                        [:lower:]

                                                        [:upper:]

                                                        [:alnum:]

                                                        [:digit:]

                                                        [:space:]

                                                        [:punct:]

                                                        [:alnum:]

 

                    练习:

                                显示/etc/目录下,以非字母开头,后面跟了一具字母及其它任意长度任意字符的文件或目录;

 

                                复制/etc目录下,所有以.d结尾的文件或目录至/tmp/mageedu.com目录中;

 

        (2) 组合键

 

                    Ctrl+l:清屏

                    Ctrl+a: 切换至命令行首

                    Ctrl+e:切换至命令行尾

                    Ctrl+c:取消命令执行

 

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

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

 

 

        (3) IO重定向和管道

 

                    程序:指令+数据

                                读入数据:Input

                                输出数据:Output

 

                    打开的文件都一个fdfile descriptor

 

                    标准输入:keyboard, 0,/dev/stdin

                    标准输出:monitor, 1,/dev/stdout

                    标准错误输出:monitor, 2,/dev/stderr

 

                    I/O重定向:

                                输入重定向

                                输出重定向:

                                            COMMAND> NEW_POS, COMMAND >> NEW_POS

                                            >:覆盖重定向;

                                            >>:追加重定向;

 

                                            set-C

                                                        如果覆盖重定向目标文件存在,则禁止执行;

                                                        >|

                                            set+C

 

                                错误重定向:

                                            2>:覆盖

                                            2>>:追加

 

                    同时重定向标准输出流和错误输出流:

                                COMMAND >/path/to/file.out 2> /path/to/file.err

 

                                COMMAND >/path/to/file.out 2>&1

 

                                COMMAND&> /path/to/file.out

 

                    输入重定向:

                                <

 

                                tr命令:

                                            tr[OPTION]... SET1 [SET2]

                                                        -d:删除字符

 

                    Here Document<<

                                cat >>/path/to/somefile << EOF

 

        管道:

                    COMMAND1 | COMMAND2 | ...

 

                    练习:tee命令的用法;

 

使用整数[编辑]

Bourne shell不同的是bash不用另外生成进程即能进行整数运算。bash使用((...))命令和$[...]变量语法来达到这个目的:

 

 VAR=55             # 将整数55赋值给变量VAR

 ((VAR = VAR + 1))  # 变量VAR1。注意这里没有'$'

 ((++VAR))          # 另一种方法给VAR1。使用C语言风格的前缀自增

 ((VAR++))          # 另一种方法给VAR1。使用C语言风格的后缀自增

 echo $((VAR * 22)) # VAR乘以22并将结果送入命令

 echo $[VAR * 22]   # 同上,但为过时用法

((...))命令可以用于条件语句,因为它的退出状态是0或者非0(大多数情况下是1),可以用于是与非的条件判断:

 

 if((VAR == Y * 3 + X * 2))

 then

         echo Yes

 fi

 

 ((Z > 23)) && echo Yes

((...))命令支持下列比较操作符:'==', '!=','>', '<', '>=',和'<='

 

bash不能在自身进程内进行浮点数运算。当前有这个能力的unix shell只有Korn shellZ shell

 

输入输出重定向[编辑]

bash拥有传统Bourne shell缺乏的I/O重定向语法。bash可以同时重定向标准输出和标准错误,这需要使用下面的语法:

 

 command &> file

这比等价的Bourne shell语法"command> file 2>&1"来的简单。2.05b版本以后,bash可以用下列语法重定向标准输入至字符串(称为here string):

 

 command <<< "string to be readas standard input"

如果字符串包括空格就需要用引号包裹字符串。

 

例子: 重定向标准输出至文件,写数据,关闭文件,重置标准输出。

 

 # 生成标准输出(文件描述符1)的拷贝文件描述符6

 exec 6>&1

 # 打开文件"test.data"以供写入

 exec 1>test.data

 # 产生一些内容

 echo "data:data:data"

 # 关闭文件"test.data"

 exec 1>&-

 # 使标准输出指向FD 6(重置标准输出)

 exec 1>&6

 # 关闭FD6

 exec 6>&-

打开及关闭文件

 

 # 打开文件test.data以供读取

 exec 6<test.data

 # 读文件直到文件尾

 while read -u 6 dta

 do

   echo "$dta"

 done

 # 关闭文件test.data

 exec 6<&-

抓取外部命令的输出

 

  # 运行'find'并且将结果存于VAR

  # 搜索以"h"结尾的文件名

  VAR=$(find . -name "*h")

进程内的正则表达式[编辑]

bash3.0支持进程内的正则表达式,使用下面的语法:

 

 [[ string =~ regex ]]

正则表达式语法同regex(7) man page所描述的一致。正则表达式匹配字符串时上述命令的退出状态为0,不匹配为1。正则表达式中用圆括号括起的子表达式可以访问shell变量BASH_REMATCH,如下:

 

 if [[ abcfoobarbletch =~ 'foo(bar)bl(.*)' ]]

 then

         echo The regex matches!

         echo $BASH_REMATCH      -- outputs: foobarbletch

         echo ${BASH_REMATCH[1]} -- outputs:bar

         echo ${BASH_REMATCH[2]} -- outputs:etch

 fi