• Shell是什么?


    什么是shell?

        定义:shell是一个命令解释器

        shell位于操作系统和应用程序之间,是他们二者的接口,负责:把应用程序的输入命令信息解释给操作系统,将操作系统指令处理后的结果解释给应用程序。

        一句话:shell就是在操作系统和应用程序之间的一个命令翻译工具。

    shell的分类

        1.图形界面shell,桌面就是一个图形界面shell

        2.命令行shell,如:linux系统下的bash

    查看系统shell信息

        echo $SHELL:查看当前系统shell版本

        cat /etc/shells:查看系统兼容支持的其他版本

    shell脚本

        定义:可执行的Linux命令或语句不在命令行状态下执行,而是通过一个文件执行时,我们将这个文件为shell脚本(可执行命令的组合)。

        示例:

        创建脚本文件,并写入内容:vim 001.sh (sh结尾,给程序员看的)

    1 #!/bin/bash
     
    2 
     
    3 echo 'shell hello'

    执行:bash 001.sh

        注释:

            单行注释:#空格...

            多行注释:<<临时字符 注释内容 临时字符(临时字符尽量不要使用汉字)

    shell的优劣势

        优势:存在时间长,拥有较多累积(诞生早),编写简单,对环境依赖小

        劣势:无法实现复杂功能,不支持现代编程语言的高级特性:面向对象等

    执行shell脚本

        1、bash 脚本文件名(先启动子进程名字叫bash,在子进程中执行脚本内容,解释器:bash)

        2、.空格/脚本文件名 (先启动子进程名字叫脚本名,在子进程中执行脚本内容,解释器:#!指定的解释器,即系统缺省shell)

        3、source 脚本名(直接在当前shell执行脚本内容,解释器:当前shell)

        注意:创建了子进程,不能使用当前终端定义的变量,使用source不会开子进程,能使用当前终端定义的变量

    变量

        普通变量    

            定义方式:变量名="变量值",习惯:数字不加引号,其它加双引号(可以变量套变量,如:b=777

    a="123$b") 执行结果:a=123777

        命令变量(命令的输出作为变量值赋给变量名)

            变量名=`命令`(注意:`是反引号)

            变量名=$(命令)

            注意:命令变量的值在定义时确定

        变量访问

            1 $变量名 

            2 "$变量名" (保证变量值是字符串)

            3 ${变量名} (限定变量名范围)

            4 "${变量名}" (推荐使用)

            删除变量:unset 变量名,修改字符编码:unset LANG

    变量分类

        1.本地变量:哪里定义哪里访问

        2.全局变量:在当前系统的所有环境下都能生效的变量(每个终端就是一个shell环境,开启子进程的shell为子shell环境)

            查看全局变量:env

            定义全局变量:export 变量名=值(最常用)

            自定义全局变量生效范围:只对当前shell环境及子shell环境有效,shell退出后全局变量消失

            定义系统级全局变量:修改~/.bashrc后,直接打开新的终端

        3.内置变量

            

    符号意义
    $0 获取当前执行的shell脚本文件名
    $$ 获取执行shell脚本的进程号
    $n 获取当前执行的shell脚本命令之后的第n个参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9就要用大括号括起来${10},如:ls -l 当前命令的参数为-l
    $# 获取当前shell命令行中参数的总个数
    $? 获取执行上一个指令的返回值(0为成功,非0为失败)

    字符串截取

            格式:${变量名:起始位置:截取长度}

            ${变量名:0:5} 从第1个字符开始,截取5个字符

            ${变量名:0-6:3} 从倒数第6个字符开始,截取之后的3个字符

        默认值

            ${变量名:-默认值}:若变量存在则输出变量值。否则输出默认值

            ${变量名:+提示信息}:若变量存在则输出提示信息,否则,啥都不输出

    表达式

        1 测试语句:条件成立,状态返回值是0,条件不成立,状态返回值是1

            test 条件

            [ 条件 ] (方括号内左右各有一个空格)

                1 数值比较:

                    n1 -eq n2 相等、-gt大于、-ge大于等于、-lt小于、-le小于等于、-ne不等于

                2 字符串比较

                    == != 、比较操作符左右各有一个空格

        2 逻辑表达式

            命令1 && 命令2 (1成功则执行2)

            命令1 || 命令2 (1失败则执行2,1执行成功,那么不执行命令2)

        3 文件表达式

            -f  判断是否是文件

                    输入:[ -f weizhi.sh ] && echo "是一个文件"

                    输出:是一个文件

            -d 判断是否是目录

            -x 判断是否可执行 (一般,目录也是可执行的)

        4 计算表达式(支持整数运算)

            $((计算过程))

            let 等式

            注意:$(())中只能用+-*/和()运算符,表达式必须是一个整体,中间不能出现空格等特殊字符

    常见符号

        >:将左侧的内容以覆盖的方式输入到右侧

        >>:追加

        1 分别重定向:bash 5-chongdingxiang.sh > res.log 2>err.log

        2 合并重定向:bash 5-chongdingxiang.sh > res.log 2>&1

        3 丢弃:bash 5-chongdingxiang.sh > /dev/null 2>&1

            注意:标准输出(standard output):程序正确运行时的输出,标准错误(standard err):程序异常时的输出

        管道符|

            使用格式: 命令1 | 命令2 

            管道符左侧命令1执行后的结果作为输入传递给右侧的命令2使用

  • 相关阅读:
    如何构造分片报文
    Python趣味入门7:循环与条件的爱恨情仇
    如何使用Javascript开发sliding-nav带滑动条效果的导航插件?
    java获取微信用户信息(含源码,直接改下appid就可以使用了)
    数据库设计工具-PowerDesigner中table视图显示name与code
    typora增加到鼠标右键
    基于springboot整合spring-retry
    idea中提交项目到github及invalid authentication data 404 not found not found问题
    git秘钥问题解析及gitlab配置(Please make sure you have the correct access rights and the repository exists)
    idea中打包跳过test
  • 原文地址:https://www.cnblogs.com/GLory-LTF/p/14312087.html
Copyright © 2020-2023  润新知