• Linux学习笔记(15)shell基础之Bash基本功能


    1 shell概述

    shell是一个命令解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序。用户可以用shell启动、挂起、停止甚至是编写一些程序。

    shell是一个功能强大的编程语言,其特点是易编写、易调试及灵活性强。shell是解释执行的脚本语言,可直接调用Linux系统命令。

    shell通常分为两类:B shell和C shell。前者的主文件名为sh,后者主要用于BSD版本的Unix中,其语法格式和C语言类似。这两种shell的语法彼此间不兼容。Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本shell。

    Linux支持的shell可查看/etc/shells配置文件

    [root@localhost ~]# cat /etc/shells

    /bin/sh

    /bin/bash

    /sbin/nologin

    /bin/dash

    /bin/tcsh

    /bin/csh

    可通过输入其相应命令进行互相转换,如使用sh:

    [root@localhost ~]# sh

    sh-4.1#

    sh-4.1# exit

    exit

    [root@localhost ~]#

    2 shell脚本的执行方式

    1)echo命令用于输出信息,其格式为:

    echo [选项] [输出内容]

    其中,-e选项支持反斜线控制的字符转换。常见的控制字符如下表:

    控制字符

    作用

    \

    输出本身

    a

    输出警告音

    

    退格键,即向左删除键

    c

    取消输出行末的换行符,与"-n"选项一致

    e

    ESCAPE键

    f

    换页符

    换行符

    回车键

    制表符,即Tab键

    v

    垂直制表符

    nnn

    按照八进制ASCII码表输出字符,其中0为数字0,nnn是三位八进制数

    xhh

    按照十六进制ASCII码表输出子非鱼,其中hh是两位十六进制数

    例:删除左侧字符:

    [root@localhost ~]# echo -e "abcde"

    abce

    制表符与换行符:

    [root@localhost ~]# echo -e "a b c d e f"

    a       b       c

    d       e       f

    十六进制ASCII码输出:

    [root@localhost ~]# echo -e "x61 x62 x63 x64 x65 x66"

    a       b       c

    d       e       f

    输出颜色:

    [root@localhost ~]# echo -e "e[1;31m abcd e[0m"

     abcd

    其中,"e[1"表示开启颜色输出,"e[0m"表示结束颜色输出。

    30m=黑色 31m=红色 32m=绿色 33m=黄色

    34m=蓝色 35m=洋红 36m=青色 37m=白色

    2)第一个脚本,其中第一行为shell标志,表示以下写的程序为shell脚本程序,后续的#表示注释

    [root@localhost ~]# vi hello.h

    #!/bin/bash    

    #Description:   The first program     

    #Autor:         ws

    #Date: 

    echo "hello world"

    3)脚本执行

    ①通过Bash调用执行脚本

    [root@localhost ~]# bash hello.h

    hello world

    赋予执行权限,直接运行(习惯的执行方式)

    [root@localhost ~]# chmod 755 hello.h

    [root@localhost ~]# ./hello.h

    hello world

    引申:Linux的回车符用"$"表示,可用过cat –A进行查看;windows的回车符在Linux中显示为"^M$",需使用dos2unix命令进行转换。

    例:显示Linux文件中的回车符:

    [root@localhost sh1]# cat -A hello.sh 
    cription:   The first program     $
    $
    #Autor:         ws$
    $
    #Date: $
    $
     $
    $
    echo "hello world"$

    3 Bash的基本功能

    (1)历史命令与命令补全

    1)历史命令history,其格式为:

    history [选项] [历史命令保存文件]

    其中,-c选项表示清空历史命令(一般不建议)-w表示把缓存中的历史命令写入命令缓存文件~/.bash_history中

    history命令默认保存1000条记录,可以在环境变量配置文件/etc/profile中进行更改,所在位置为:HISTSIZE=1000。

    历史命令的调用方式有:

    ①使用上下箭头调用

    ②使用"!n"执行第n条历史命令

    ③使用"!!"重复执行上一条命令

    ④使用"!字串"重复执行最后一条以该字串开头的命令

    2)在Bash中,命令与文件补全可通过"Tab"键来完成

    (2)命令别名与常用快捷键

    1)命令别名

    设定命令别名的格式为:alias 别名="原命令"

    查询命令别名的方式为:alias

    使用别名时注意命令的执行顺序

    ①第一顺位为用绝对路径或相对路径执行的命令;

    ②第二顺位为执行别名;

    ③第三顺位为执行Bash的内部自带命令;

    ④第四顺位为执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令。

    可通过$PATH来查看系统的环境变量:

    [root@localhost ~]# $PATH

    -bash: /usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin: 没有那个文件或目录

    注意:命令行定义的别名是临时的,如需永久生效,则在家目录的.bashrc中写入别名即可,如root下的别名文件:

    [root@localhost ~]# vim /root/.bashrc

    # .bashrc

    # User specific aliases and functions

    alias rm='rm -i'

    alias cp='cp -i'

    alias mv='mv -i'

    # Source global definitions

    if [ -f /etc/bashrc ]; then

            . /etc/bashrc

    fi

    ~

    删除别名的命令为:unalias 别名

    2)Bash常用快捷键

    快捷键

    作用

    Ctrl+A

    将光标移动到命令行开头,如果输入的命令过长,想要把光标移动到命令行开头时使用

    Ctrl+E

    将光标移动到命令行结尾

    Ctrl+C

    强制终止当前的命令

    Ctrl+L

    清屏,相当于clear命令

    Ctrl+U

    删除或剪切光标之前的命令。输入了一行很长的命令,不用使用退格键一个一个字符的删除,使用这个快捷键更加方便

    Ctrl+K

    删除或剪切光标之后的内容

    Ctrl+Y

    粘贴Ctrl+U或Ctrl+K剪切的内容

    Ctrl+R

    在历史命令中搜索,按下该快捷键后会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索

    Ctrl+D

    退出当前终端

    Ctrl+Z

    暂停,并放入后台,该快捷键牵扯工作管理的内容

    Ctrl+S

    暂停屏幕输出

    Ctrl+Q

    恢复屏幕输出

    (3)输入输出重定向

    1)标准输入输出

    设备

    设备文件名

    文件描述符

    类型

    键盘

    /dev/stdin

    0

    标准输入

    显示器

    /dev/stdout

    1

    标准输出

    显示器

    /dev/stderr

    2

    标准错误输出

    2)输出重定向

    类型

    符号

    作用

     

    标准输出重定向

    命令 > 文件

    覆盖的方式,把命令的正确输出输出到指定的文件或设备当中

    命令 >> 文件

    追加的方式,把命令的正确输出输出到指定的文件或设备当中

     

    标准错误输出重定向

    错误命令 2> 文件

    以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中

    错误命令 2>> 文件

    以追加的方式,把命令的错误输出输出到指定的文件或设备当中

     

     

     

     

    正确输出和错误输出同时保存

    命令 > 文件 2>&1

    以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中

    命令 >> 文件 2>&1

    以追加的方式,把正确输出和错误输出都保存到同一个文件当中

    命令 &> 文件

    以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中

    命令 &>> 文件

    以追加的方式,把正确输出和错误输出都保存到同一个文件当中

    命令 >> 文件1 2>> 文件2

    把正确输出追加到文件1中,把错误输出追加到文件2中

    例1:向test1文件中写入ls命令 的输出:

    [root@localhost ~]# ls > test1

    [root@localhost ~]# cat test1

    anaconda-ks.cfg

    hello.h

    install.log

    install.log.syslog

    ntfs-3g_ntfsprogs-2014.2.15.tgz

    test1

    testfile

    例2:将date命令的输出追加到test1中:

    [root@localhost ~]# date >> test1

    [root@localhost ~]# cat test1

    anaconda-ks.cfg

    hello.h

    install.log

    install.log.syslog

    ntfs-3g_ntfsprogs-2014.2.15.tgz

    test1

    testfile

    2015年 02月 21日 星期六 04:29:05 CST

    例3:将错误输出写入test2文件中:

    [root@localhost ~]# lis 2>> test2

    [root@localhost ~]# lst >> test2 2>&1

    [root@localhost ~]# date &>> test2

    [root@localhost ~]# cat test2

    -bash: lis: command not found

    -bash: lst: command not found

    2015年 02月 21日 星期六 04:37:31 CST

    注:一般将不需要的输出直接丢进垃圾箱中,其相应的命令为:ls &> /dev/null

    3)输入重定向

    wc命令为统计命令,其格式为:

    wc [选项] [文件名]

    其中,-c选项表示统计字节数-w选项表示统计单词数,-l选项表示统计行数

    输入重定向一般的格式为:命令 < 文件,表示将文件作为命令输入,如:

    [root@localhost ~]# wc < anaconda-ks.cfg

      54  124 1272

    (4)多命令顺序执行与管道符

    1)多命令执行顺序

    多命令执行符

    格式

    作用

    ;

    命令1;命令2

    多个命令顺序执行,命令之间没有任何逻辑联系

    &&

    命令1&&命令2

    逻辑与,当命令1正确执行,则命令2才会执行,当命令1执行不正确,则命令2不会执行

    ||

    命令1||命令2

    逻辑或,当命令1执行不正确,则命令2才会执行,当命令1正确执行,则命令2不会执行

    例:

    [root@localhost ~]# ls;date;cd /usr/;pwd

    anaconda-ks.cfg  install.log         ntfs-3g_ntfsprogs-2014.2.15.tgz  test2

    hello.h      install.log.syslog  test1                         testfile

    2015年 02月 21日 星期六 04:51:56 CST

    /usr

    dd命令用于磁盘复制或数据复制,其格式为:

    dd if=输入文件 of=输出文件 bs=字节数 count=个数

    其中,if=输入文件指定源文件或源设备of=输出文件指定目标文件或目标设备bs=字节数表示一次输入/输出多少个字节,即这些字节看作数据块,count=个数表示输入/输出多少个数据块

    例:向/root/testfile文件中写入/dev/zero的内容,共写入10M,同时显示存取时间:

    [root@localhost usr]# date;dd if=/dev/zero of=/root/testfile bs=1k count=10000;date

    2015年 02月 21日 星期六 05:01:43 CST

    记录了10000+0 的读入

    记录了10000+0 的写出

    10240000字节(10 MB)已复制,1.29893 秒,7.9 MB/秒

    2015年 02月 21日 星期六 05:01:44 CST

    [root@localhost usr]# ll -h /root/testfile

    -rw-r--r--. 1 root root 9.8M 2月  21 05:01 /root/testfile

    注:判定一条命令是否正确执行,可以通过如下命令格式:

    命令 && echo yes || echo no

    2)管道符

    管道符的命令格式为:

    命令1 | 命令2

    表示命令1的正确输出作为命令2的操作对象

    例:使用more命令显示/etc目录下文件的详细信息:

    [root@localhost usr]# ll -a /etc/ | more

    总用量 1796

    drwxr-xr-x. 103 root root  12288 2月  21 03:59 .

    dr-xr-xr-x.  26 root root   4096 2月  21 03:59 ..

    drwxr-xr-x.   3 root root   4096 1月   7 22:12 abrt

    drwxr-xr-x.   4 root root   4096 1月   7 22:22 acpi

    -rw-r--r--.   1 root root     44 2月  17 20:44 adjtime

    ……

    grep命令用于搜索,其命令格式为:

    grep [选项] "搜索内容" 文件名

    其中,-i选项表示忽略大小写,-n选项表示输出行号,-v选项表示反向查找,--color-auto选项表示搜索出的关键字用颜色显示

    (5)通配符与其他特殊符号

    1)通配符

    通配符

    作用

    ?

    匹配一个任意字符

    *

    匹配0个或任意多个字符,也就是匹配任何内容

    []

    匹配中括号中任意一个字符

    [-]

    匹配中括号中任意一个字符,-表示一个范围,如[a-z]代表匹配一个小写字母

    [^]

    逻辑非,表示匹配不是中括号内的一个字符,例如[^0-9]代表一个不是数字的字符

    2)Bash中其他特殊符号

    符号

    作用

    ' '

    单引号,在单引号中所有的特殊符号,如"$"和"`"(反引号)都没有特殊含义

    " "

    双引号,在双引号中特殊符号都没有特殊含义,但是"$"、"`"和""是例外,其特殊含义分别为"调用变量的值"、"引用命令"和"转义符"

    ` `

    反引号,反引号括起来的内容是系统命令,在Bash中会先执行它,和$()作用一样,不过推荐使用$(),因为反引号容易看错

    $()

    和反引号作用一样,用来引用系统命令

    #

    在Shell脚本中,#开头的行代表注释

    $

    用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值

    转义符,跟在之后的特殊符号将失去特殊含义,变为普通字符。如$将输出$符号,而不当做变量引用

    例:单引号与双引号:

    [root@localhost usr]# name=ws

    [root@localhost usr]# echo "$name"

    ws

    [root@localhost usr]# echo '$name'

    $name

    [root@localhost usr]# echo "$(date)"

    2015年 02月 21日 星期六 05:29:24 CST

    [root@localhost usr]# echo '$(date)'

    $(date)

    例:反引号:

    [root@localhost usr]# abc=`date`

    [root@localhost usr]# echo $abc

    2015年 02月 21日 星期六 05:31:57 CST

    [root@localhost usr]# abc=$(date)

    [root@localhost usr]# echo "$abc"

    2015年 02月 21日 星期六 05:32:28 CST

  • 相关阅读:
    PHP+JQUEY+AJAX实现分页
    Flume知识扩展
    Flume高级之自定义MySQLSource
    Flume监控之Ganglia
    Flume 概述/企业案例
    Yarn (转自之乎者也)
    MapReduce如何解决数据倾斜?
    JVM调优
    Hive性能优化
    HBase的二级索引
  • 原文地址:https://www.cnblogs.com/mengrennwpu/p/4320614.html
Copyright © 2020-2023  润新知