• 十、Shell基础


    一、shell概述

    1.Shell是什么

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

    shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。shell是解释执行的脚本语言,在shell中可以直接调用linux系统命令

    2.Shell分类

    1)Bourne Shell:从1979起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh

    2)C Shell:C Shell主要在BSD版的Unix系统中使用,其语法和C语言非常类似,所以叫C Shell

    Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh、ksh、Bash(linux中的标准shell)、psh、zsh;C 家族主要包括:csh(unix中主要使用的shell)、tcsh

    TIP:可以使用命令:echo ¥SHELL来输出当前系统使用的是什么shell

    3)Bash:Bash与sh兼容,现在使用的linux就是使用Bash作为用户的基本Shell

    3.Linux支持的Shell

    image

    二、脚本执行方式

    1.echo输出命令

    echo [选项] [输出内容]

    选项:

    -e:支持反斜线控制的字符转换

    控制字符

    说明

    a 输出警告音
     退格键,也就是向左删除键
    换行符
    回车键
    制表符,也就是Tab键
    V 垂直制表符
    nnn 按照八进制ASCII码输出字符。其中0为数字零,nnn是三位八进制数
    xhh 按照十六进制ASCII码输出字符。其中hh是两位十六进制数

    image

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

    #使用红色字体输出你好

    #30m=黑色,31m=红色,32m=绿色,33m=黄色,34m=蓝色,35m=粉红,36m=青色,37m=白色

    上面这行示例代码中e代表颜色,[1代表开启眼色,31m代表我要使用红色,e[0m代表关闭颜色

    2.第一个脚本

    1)使用命令“vi hello.sh”创建一个脚本

    2)文本中输入:”#!bin/bash”(做一个声明)

    3)正文输入:echo –e “Hello World!”,然后保存退出

    3.脚本执行

    1)赋予执行权限,直接运行

    chmod 755 hello.sh

    ./hello.ssh

    2)通过Bash调用执行脚本

    bash hello.sh

    三、bash的基本功能

    1.命令别名与快捷键

    alias

    #查看系统中所有的命令别名

    alias 别名=’原命令’

    #设定命令别名(需要注意的是只是用命令行增加别名的话只是临时使用,相当于windows当中的临时环境变量)

    image

    image

    1)别名永久生效

    vi ~/.bashrc

    #写入环境变量配置文件(需要注意的是写入后是重启设备后才会生效,如果需要直接生效需要再加一条命令source .bashrc相当于更新一下那么就可以直接生效了)

    2)删除别名

    unalias 别名

    #删除别名(只是删除临时别名)

    3)命令生效顺序

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

    第二顺位执行别名

    第三顺位执行bash的内部命令

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

    4)常用快捷键

    ctrl+c 强制终止当前命令
    ctrl+l 清屏
    ctrl+a 光标移动到命令行首部
    ctrl+e 光标移动到命令行尾部
    ctrl+u 从光标所在位置删除到行首
    ctrl+z 把命令放入后
    ctrl+r 在历史命令中搜索

    2.历史命令

    1)历史命令

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

    选项:

    -c:清空历史命令

    -w:把缓存中的历史命令写入历史命令保存文件”~/.bash_history”

    history看到的是所有历史命令,.bash_history中的历史命令是系统退出时候自动写入的。

    需要注意的是历史命令会默认保存1000条,可以在环境变量配置文件/etc/profile中进行修改

    image

    2)历史命令的调用

    使用上下箭头调用以前的历史命令

    使用”!n”重复执行第n条历史命令

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

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

    3)命令与文件补全

    在bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按下Tab键就会进行自动补全

    3.输出重定向

    1)标准输入输出

    设备

    设备文件名

    文件描述符

    类型

    键盘 /dev/stdin 0 标准输入
    显示器 /dev/sdtout 1 标准输出
    显示器 /dev/sdterr 2 标准错误输出

    2)输出重定向

    类型

    符号

    作用

    标准输出重定向 命令 > 文件 以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中
    命令 >> 文件 以追加的方式,把命令的正确输出输出到指定的文件或设备当中
    标准错误输出重定向 错误命令 2>文件 以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中
    错误命令 2>>文件 以追加的方式,把命令的错误输出输出到指定的文件或设备当中

    标准输出重定向将命令的结果保存在文件中(只要命令的结果有输出就会保存)

    image

    错误输出重定向(注意符号两边没有空格

    image

    类型

    符号

    作用

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

    (注意区分是否存在空格)

    命令 > 文件 2>&1 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中
    命令 >> 文件 2>&1 以追加的方式,把正确输出和错误输出都保存到同一个文件当中
    命令 &>文件 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中
    命令 &>>文件 以追加的方式,把正确输出和错误输出都保存到用一个文件当中
    命令>>文件1 2 >>文件2 把正确的输出追加到文件1中,把错误的追加到文件2中

    ls &>/dev/null只执行命令,不保存也不显示运行结果,/dev/null可以当作是垃圾回收站

    命令 >> 文件 2>&1

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

    image

    命令 &>>文件

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

    image

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

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

    image

    3)输入重定向

    wc [选项] [文件名]

    ctrl+d退出

    选项 说明
    -c 统计字节数
    -w 统计单词数
    -l 统计行数

    使用wc统计文件行数、单词数、和字节数,也可以不用中间的那个<符号也可以统计

    image

    4.管道符

    1)多命令顺序执行

    多命令执行符

    格式

    作用

    ;
    这是一个分号
    命令1 ; 命令2 多个命令顺序执行,命令之间没有任何逻辑联系
    && 命令1 && 命令2 逻辑与
    当命令1正确执行,则命令2才会执行
    当命令1执行不正确,则命令2不会执行
    || 命令1 || 命令2 逻辑或
    当命令1执行不正确,则命令2才会执行
    当命令1执行正确,则命令2不会执行

    多个命令顺序执行

    image

    逻辑与

    image

    逻辑或

    image

    TIP:可以通过类似:ls && echo yes || echo no这样的方式来判断命令是否有误

    2)管道符

    命令1 | 命令2

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

    例如:

    ls –l  /etc | more来分屏查看命令执行结果

    netstat –an | grep ESTABLISHED来监听我的服务器使用情况

    netstat –an | grep ESTABLISHED | wc –l 来查看有多少人在使用我们的服务器

    5.通配符

    1)通配符

    通配符

    作用

    ? 匹配一个任意字符
    * 匹配0个或任意多个任意字符,也就是可以匹配任何内容
    [] 匹配中括号中任意一个字符,例如[abc]代表一定匹配一个字符,或者a或者b或者c
    [-] 匹配括号中任意一个字符,-代表一个范围,例如[a-z]代表匹配一个小写字母
    [^] 逻辑非,表示匹配不是括号内的一个字符,例如:[^0-9]代表匹配一个不是数字的字符

    例如:

    ls test* 列出test开头的所有文件

    主要匹配文件名或者目录

    2)Bash中其他特殊符号

    符号

    作用

    ‘’ 单引号。在单引号中所有的特殊符号,如$和`都没有特殊含义
    “” 双引号。在双引号中的特殊符号都没有特殊含义,但是$、`和是例外,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义
    `` 反引号。反引号括起来的内容是系统命令,在bash中会先执行他。和$()作用一样。不过推荐使用$(),因为反引号非常容易看错
    $() 和反引号作用一样,用来引用系统命令
    # 在shell脚本中,#开头的代行注释
    $ 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值
    转义符,在跟之后的特殊符号将失去特殊含义,变为普通字符。如$将输出$符号,而不当作是变量引用

    image

  • 相关阅读:
    UML 类与类之间的关系
    HTTP协议基础
    LDAP介绍
    UML 类与类之间的关系
    我的桌面
    RoR的OO与敏捷[1][88250原创]
    Ubuntu7.10纯仿Leopard[00原创]
    37个我爱Ruby的理由
    在Ubuntu 7.10上安装Rails[00整理]
    RoR的OO与敏捷[1][88250原创]
  • 原文地址:https://www.cnblogs.com/JianXu/p/5326664.html
Copyright © 2020-2023  润新知