• linux【5】:Shell 编程


    一、shell概述

    shell 是一个命令行解释器,是外部程序和Linux内核的桥梁,接收用户命令,然后调用 操作系统内核,充当一个翻译官的角色。
    在这里插入图片描述

    二、shell脚本入门

    shell脚本 以 #!/bin/bash 开头,指定解析器,shell脚本文件一般以.sh结尾,但是也可以没有

    1、hello world

    在这里插入图片描述

    2、执行脚本的四种方式

    1. sh 相对路径/.绝对路径
      在这里插入图片描述

    2. bash 相对路径/绝对路径
      在这里插入图片描述

    3. 设置脚本文件有执行的权限后,直接 输入绝对路径或者相对路径执行
      在这里插入图片描述

    4. . / source 文件相对路径或绝对路径
      在这里插入图片描述

    前三种方式 是在当前shell中打开一个子shell 执行脚本内容,当脚本内容结束,则 子shell结束,回到父shell中。
    第四种 是在当前shell中执行,无需打开子shell。
    区别:在环境变量继承的关系上,如果子shell 设置的当前变量,父shell是不可见的

    3、创建子shell

    命令输入:bash 再执行就是在子bash下执行操作,exit退出当前子shell
    在这里插入图片描述

    三、变量

    1、系统变量

    • env 查看系统变量
      在这里插入图片描述

    • 打印系统变量
      如:echo $PATH
      在这里插入图片描述

    • set | less 分页显示当前shell中所有变量

    2、自定义变量

    等号左右不能有空格,String 可以用”“

    • 1、定义局部变量
      aa=3 在这里插入图片描述

    • 2、定义全局变量
      将局部变量提升为 全局变量,export 变量名
      如:export a

    • 3、全局变量和局部变量的区别
      全局变量在所有的子shell中都可以获取值,局部变量只能在本shell中获取值
      在这里插入图片描述
      解析: 根据执行脚本的四种方式可知,./执行脚本是创建了一个子shell 去执行脚本,这个时候 new 局部变量在子shell中获取不到值,source 是在本shell中执行脚本,因此他可以获取到new的值,将new 改为全局变量,此时 ./ :子shell执行脚本也是可以拿到变量值的。

    • 4、删除变量 unset 变量名

    • 5、设置静态变量(常量):readonly 变量,不能用 unset
      在这里插入图片描述

    • 6、变量定义规则
      在这里插入图片描述

    • 7、初始变量计算
      由于变量都是默认string类型,不支持数值运算,那么怎么进行变量计算呢
      如下
      在这里插入图片描述

    3、特殊变量【参数输入】

    • 1、获取输入的参数:$n
      n 为数字,$0 代表该脚本名称,$1- 9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9 代表第一到第九个参数,十以 上的参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如{10})
      在这里插入图片描述

    • 2、获取参数个数:$#
      在这里插入图片描述

    • 3、获取全部参数 $* 和 $@
      $*: 所有的参数看成一个整体
      $@:所有参数看成集合中的元素
      在这里插入图片描述

    • 4、获取脚本返回结果:$?
      :最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行,反之,执行错误
      在这里插入图片描述

    四、运算符

    语法:
    $ ((运算式)) 或者 $[运算式]
    在这里插入图片描述

    五、条件运算

    0 真 1 假

    1、基础语法

    • 1、test 表达式
      表达式的 = 前后要有空格
      在这里插入图片描述

    • 2、[ 表达式 ]
      表达式前后要有 空格
      在这里插入图片描述

    2、判断条件

    • 1、 两个整数之间的比 在这里插入图片描述
      在这里插入图片描述

    • 2、文件权限判断
      在这里插入图片描述在这里插入图片描述

    • 3、按照文件类型判断
      在这里插入图片描述
      在这里插入图片描述

    • 4、多条件判断 [ 表达式 ] && 表达式为真执行 || 表达式为假执行这个
      在这里插入图片描述

    六、流程控制

    1、if判断

    1、单分支
    在这里插入图片描述

    2、多分支判断
    在这里插入图片描述

    2、case判断

    在这里插入图片描述
    注意事项
    在这里插入图片描述

    3、for循环

    在这里插入图片描述
    在这里插入图片描述

    1、遍历打印输入的每个参数 $* 和 $@ 都代表全部参数集合
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    2、当 $* 被双引号”“包住时,所有参数会看作一个参数,只会循环一次

    在这里插入图片描述
    在这里插入图片描述

    3、当 $@ 被双引号”“包住时,和没有双引号一个效果,会遍历循环所有参数
    在这里插入图片描述
    在这里插入图片描述

    4、while

    从1加到100

    在这里插入图片描述

    在这里插入图片描述

    七、read读取控制台输入


    在这里插入图片描述
    在这里插入图片描述

    八、函数

    8.1、系统函数

    8.1.1、basename

    在这里插入图片描述

    8.1.2、dirname

    在这里插入图片描述

    8.2、自定义函数

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    九、正则表达式

    正则表达式通常被用来检索、替换那些符合某个模式的文本

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    十、文本处理工具

    1、cut

    cut 的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。

    在这里插入图片描述
    在这里插入图片描述

    2、awk

    一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    Spring Security(7)
    C++ STL进阶与补充(算法)
    HyperBDR新版本上线,自动化容灾兼容再升级!
    【Linux】程序地址空间
    中大型商业银行堡垒机升级改造方案!必看!
    playwright自动化项目搭建
    C语言下的文件详解
    电脑技巧:27个Office使用小技巧,值得收藏
    基于复杂网络的生产系统瓶颈簇识别方法
    操作配置:如何在一台服务器中以服务方式运行多个EasyCVR程序?
  • 原文地址:https://blog.csdn.net/qq_47848696/article/details/127429749