• 《前端运维》一、Linux基础03Shell基础及补充


    诶诶欸?不是学Linux么?怎么要讲shell了?shell是啥?啥是shell?

    别急,我们先简单了解下shell是什么。Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。而我们日常中所说的Shell,通常是指Shell脚本,但是你一定要注意的是Shell和Shell Script并不是一回事。

    Shell是解释执行的脚本语言,在Shell中可以直接使用Linux系统命令。诶?脚本语言?javascript不也是脚本语言?是的。Shell和javascript都是脚本语言。理论上讲,如果Linux能理解javascript,那么javascript完全可以像Shell一样在Linux上运行。换句话说,javascript代码可以在浏览器中运行,Shell可以在Linux中使用,它们所扮演的角色都是类似的,只不过运行的平台不同,道理是相通的。

    OK,从现在起,所有的代码都是在本地编写,并通过FTP传到服务器上运行,如果你是Windows电脑,那么下载个XFTP软件使用即可,如果你是mac,请百度下如何传文件到服务器,这不是本文的重点,也不再赘述。其实mac的话,本地的terminal也可以运行linux命令,但是涉及到一些服务器文件的时候,可能就不行了。

    首先,我们创建一个本地的文件,后缀名其实是无所谓的,还记得不,我们之前说过,linux是不会根据后缀名来区分文件类型的,那我们加上后缀名一方面是为了见名知意,另一方面是为了其他平台的兼容(这个是我编的)。

    由于Linux文件不区分类型,所以我们要在写shell脚本的文件里面写上:#!/bin/bash。就像Html文件开头的<!DOCTYPE html>一样,是为了告诉系统,这个文件用什么程序来解释该文件的内容。

    ps:bash是什么意思呢?其实就是Linux的shell的种类,比如常见的有:

    • Bourne Shell(/usr/bin/sh或/bin/sh)
    • Bourne Again Shell(/bin/bash)
    • C Shell(/usr/bin/csh)
    • K Shell(/usr/bin/ksh)
    • Shell for Root(/sbin/sh)

    等等。所以,这回你知道了,bash是什么意思,就是shell的一个种类而已。

    一、第一个shell脚本

    我们先来创建一个脚本文件,并写上在文件的里面写上这样的内容:

    #!/bin/bash
    echo 'Hello World!'

    然后,根据我们之前所说,通过FTP把这个文件传到/demo目录下,然后通过sh命令执行脚本,激动人心的时刻到来了~

    完美!这里有一点要注意的是,通过sh命令调用shell脚本文件,可以不用在第一行指定解释器信息,因为实际上,你的命令已经决定了用啥解释器。但是作为可执行文件执行的时候,一定要加的。所以无论啥场景,你加上肯定没问题。

    另外一种,可执行文件的方式:

    这里要注意的是,文件的地址一定要写相对路径的形式,因为如果你只写test1.sh,系统会去PATH里去找,显而易见是找不到的。

    我们已经完成了脚本的运行。下面,我们来学习一些有关于Shell语言的一些基本内容。

    二、补充

    2.1、echo

    输出内容到标准输出。上面第一部分已经使用过了,这里不再重复:

    • -e,激活转义字符。

    2.2、alias,alias [别名]=[指令名称]

    别名,简单来说,类似于npm包管理的package.json中的script,在一个简短的命令和复杂的命令间建立联系,可以让命令的使用更便捷。该命令可以创建临时生效的别名。如果要永久生效,需要修改~/.bashrc文件。也可以通过直接执行alias命令,查看当前设置别名的命令有哪些。

    2.3、history

    可以查询执行过的命令。选项-c 会清空历史命令,选项-w,可以把缓存中的历史命令写入历史命令保存文件(~/.bash_history),默认情况下,历史命令会保存1000条,可以修改/etc/profile文件中的HISSIZE字段,从而修改其可保存的数量。历史命令可以通过以下方式来调用:

    1. 使用上下箭头调用以前的历史命令
    2. 使用 !n 重复执行第n条历史命令
    3. 使用 !! 重复执行上一条命令
    4. 使用 !字符 重复执行最后一条以该字符串开头的命令

    2.4、命令的生效顺序

    • 绝对路径或者相对路径
    • 别名
    • bash内部命令
    • 按照$PATH环境变量定义的目录查找顺序找到的第一个命令

    2.5、命令快捷键

    命令含义
    ctrl+c 强制终止当前命令
    ctrl+l 清屏
    ctrl+a 光标移动到命令行首
    ctrl+e 光标移动到命令行尾
    ctrl+u 从光标所在的位置删除到行首


    2.6、标准输入输出

    设备设备文件名文件描述符类型
    键盘 /dev/stdin 0 标准输入
    显示器 /dev/stdout 1 标准输出
    显示器 /dev/stderr 2 标准错误输出

     

    2.6.1、输出重定向

    类型符号作用
    标准输出重定向 命令 > 文件 以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中
    标准输出重定向 命令 >> 文件 以追加的方式,把命令的正确输出输出到指定的文件或设备当中
    错误输出重定向 命令>文件 以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中
    错误输出重定向 命令>>文件 以追加的方式,把命令的错误输出输出到指定的文件或设备当中
    正确输出和错误输出同时保存 命令>文件 2>&1 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中
    正确输出和错误输出同时保存 命令>文件 2>>&1 以追加的方式,把正确输出和错误输出都保存到同一个文件当中
    正确输出和错误输出同时保存 命令&>文件 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中
    正确输出和错误输出同时保存 命令&>>文件 以追加的方式,把正确输出和错误输出都保存到同一个文件当中
    正确输出和错误输出同时保存 命令>>文件1 2>文件2 以覆盖的方式,正确的输出追加到文件1中,把错误输出追加到文件2中

     

    2.6.2、输入重定向

    wc命令的功能为统计指定文件中的行数、字数、字节数, 并将统计结果显示输出。命令 < 文件,把文件做为命令的输入。

    2.7、管道符 

    就是“|”这个符号。使用方法是这样的:

    • 命令1|命令2

    意思是命令1的正确输出会作为命令2的操作对象。

    2.8、通配符

    用来匹配目录或文件名,也就是说在操作文件的时候,支持下面的字符来匹配。

    通配符作用
    ? 匹配一个任意字符
    * 匹配0个或任意字符,也就是可以匹配任意内容
    [] 匹配中括号中任意一个字符
    [-] 匹配中括号中任意一个字符,-代表范围
    [^] 匹配不是中括号中的一个字符

    2.9、其他符号

    符号作用
    '' 单引号,在单引号中所有的特殊符号,如$和`都没有特殊含义
    "" 双引号,在双引号里特殊符号都没有特殊含义,但是 $ ` \ 例外,拥有调用变量值,引用命令和转义的含义
     `` 反引号,扩起来的是系统命令
    $() 和反引号一样
    # 在shell脚本中,#开头的行代表注释
    $ 用于调用变量的值
    \ 转义符号

    今天内容比较散乱,主要作为承上启下的作用。而这篇文章也没写例子,主要是我觉得如果认真学习了前两篇内容,这篇的例子完全可以由你自己去尝试,就当做是一次作业吧。下一篇文章,我们正式进入Shell的学习。记得别忘了把准备工作做好哦。

  • 相关阅读:
    Silverlight 调用GP服务第一篇之发布GP服务(Geoprocessing Service)
    SQLServer中char、varchar、nchar、nvarchar的区别:
    word中带圈符号如何手动输入
    js中循环for
    正则表达式总结
    SQL Server 2008 数据库 不允许保存修改。
    多线程三种锁Monitor,lock,Mutex
    Lambda和Linq的用法
    RowDeleting和RowDeleted区别
    ASP.NET中aspx.cs页面代码中的换行方法
  • 原文地址:https://www.cnblogs.com/zaking/p/14772071.html
Copyright © 2020-2023  润新知