• 【Shell篇<Ⅰ>】——shell脚本、变量、数值运算


    让我们进入今天的学习吧!
    💪Keep  trying💪

    在这里插入图片描述

    一、shell概述

    1.1 什么是shell?

      Linux内核与用户之间交互的解释器程序。直白点说就是人和Linux之间语言的翻译官,Linux听不懂人话,但能听懂shell说的话。

    • shell解释器有很多,常用的是 /bin/bash

    2.2 shell的使用方法

    • 交互式——命令行
      也就是在终端通过命令行的方式对Linux系统进行管理
      特点:人工干预,智能化程度高;但是需要逐条去解释,效率低下,不能解放运维人员的双手
    • 非交互式——脚本
      特点:需要提前对整个结构进行设计,智能化难度大;批量执行效率高,方便在后台悄悄运行

    3.3 bash解释器的特性

    • 支持快捷键、tab补全、历史命令、别名、标准输入输出、重定向、管道等操作

    二、shell脚本的编写及执行

    2.1 什么是shell脚本?

    • 提前规划并写好的可执行语句,能够完成特定的任务的可执行文件
    • 特点:按顺序,批量进行处理
    • 常见的脚本语言:bash shell、Python、prel、Ruby、PHP

    2.2 脚本的构成及执行

    • 规范化脚本
      • #!:声明脚本使用的解释器
      • #:对脚本进行注释
      • 可执行的shell语句
    • 脚本的执行方法
      • 给脚本文件添加可执行(x)权限,使用绝对路径去执行
      • bash 脚本文件
      • source 脚本文件
      • 这里需要注意一下,x权限、bash 和 source 执行脚本的一个区别。使用x权限和吧bash执行脚本,bash解释器本身会再生成一个bash子进程去执行脚本,在脚本执行完之后这个子进程就会消亡;而source执行脚本时,是调用原本的这个bash去执行脚本,执行完脚本后不会消亡。【这种区别可能会造成局部变量的影响,因为全局变量是基于当前】,工作中一般都会使用x权限的形式执行脚本。
        来看下面这个例子,你就能很清晰的发现这俩到底有啥区别,编写一个很简单的脚本
    #!/bin/bash
    a=100  # 定义一个变量a
    
    • 1
    • 2

    我们用上面两种不同的方法来执行一下这个脚本
    在这里插入图片描述可以很清楚的看到,用bash执行的脚本,在脚本结束后,a这个变量就跟这bash子进程一起消亡了,而source就不会。

    • 脚本实例——编写脚本创建yum仓库
    #!/bin/bash
    #搭建yum软件仓库
    mkdir /abc
    mount /dev/cdrom /abc
    rm -rf /etc/yum.repos.d/*.repo
    echo "[abc]
    name=abcabc
    baseurl=file:///abc
    enabled=1
    gpgcheck=0" > /etc/yum.repos.d/abc.repo
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    三、shell变量

    3.1 变量的设置和取消

    • 注意:变量只能由数字、字母、和下划线组成,并且不能以数字开头,变量赋值时,等号两边不能有空格。

    • 自定义变量
      格式:变量名=值,如:a=100
      第一次为变量声明,第二次就是重新赋值

    • 查看变量
      格式:$变量名

    • 取消变量
      格式:变量名=空 或者 unset 变量名

    3.2 环境变量

    • 环境变量名一般为纯大写,由系统维护

    • env:列出所有的环境变量
      set:列出当前所有的变量

    • 常见的环境变量

      • USER:当前用户名
      • UID:当前用户的id号
      • HOME:当前用户家目录
      • HOSTNAME:主机名
      • SHELL:当前用户的解释器
      • PWD:当前位置
      • PATH:存储命令的路径
      • PS1:一级提示符
      • PS2:二级提示符(就是在续行的时候显示的提示符,\为续行符)
        在这里插入图片描述

    3.3 预定义变量

    • 用来保存脚本程序的执行信息,配合脚本使用,直接使用即可,不要赋值
      • $*:执行脚本时后面所有位置参数
      • $#:执行脚本时后面位置参数的个数
      • $$:当前程序的进程号(该号码是随机的)
      • $?:判断上一条指令是否执行成功,0是成功,非0是失败
      • $0:当前所在的进程或者脚本名字

    3.4 位置变量

    • 在命令行执行脚本时,脚本后面所跟的参数
      • $1:执行脚本时,脚本后面所跟的第一个参数
      • $2:执行脚本时,脚本后面所跟的第二个参数
      • $3:执行脚本时,脚本后面所跟的第三个参数)

    3.5 变量的作用范围

    • 局部变量:新定义的变量只在当前的shell环境(bash进程)中有效
    • 全局变量:新定义的变量在当前的shell及子shell中都有效(对父shell无效)
    • 发布全部变量:export 变量名
      取消全局变量: export -n 变量名

    四、shell的其他语法

    4.1 三种定界符

    • 双引号:可正常调用引号里面的变量
    • 单引号:屏蔽特殊符号的功能,全部当做字符串进行输出
    • 反撇号:获取命令的执行结果,等同于 $(命令)

    4.2 read 标准输入输出

    • read:从键盘读入变量的值再进行赋值
    • 格式:read [-p "提示信息" -t 超时时间] 变量名
      注意:-t选项可以指定超时时间,单位为秒,如果超过这个时间还没输入值,那么程序就会直接退出。
      看下面这个脚本
    #!/bin/bash
    read -p "请输出用户名: " username
    read -p "请输入密码: " -t 10 password #10s内不输入密码就无效了
    echo $username
    echo $password
    
    • 1
    • 2
    • 3
    • 4
    • 5

    执行结果为:
    在这里插入图片描述

    4.3 终端显示控制

    • 关闭终端输出:stty -echo
    • 开启终端输出:stty -echo

    五、数值运算

    5.1 expr 运算工具

    • 计算指定的表达式并输出计算结果(只能对整数进行运算)
    • 格式:expr 整数1 运算符 整数2
    • 运算符:+ - * / %
      注意:做乘法运算是乘号要用单引号引起来或者用\进行转义
      在这里插入图片描述

    5.2 $[] 和 $(()) 运算

    • 格式:直接将算式写在括号里面即可
    • 注意:计算完之后不会输出结果,因为式子本身就是结果,需要输出就echo 而且,运算变量的话,不需要再加$号了。
      在这里插入图片描述

    5.3 let 运算符

    • 用于变量的创建及自增自减
    • 创建:
      在这里插入图片描述
    • 自增:
      在这里插入图片描述

    5.4 使用 bc 实现小数运算

    • 命令行执行指令 bc 可以进入交互式计算器,quit 退出
    • 非交互式使用
      scale可以定义结果的小数位数。
      在这里插入图片描述

             👆回到顶部👆

    在这里插入图片描述

  • 相关阅读:
    机器学习笔记:特征缩放(sklearn实现)
    华中某科技大学校园网疑似dns劫持的解决方法
    软件测试零基础入门好学吗?
    Python学习笔记 - 面向对象编程
    trustZone学习
    TiDB 一栈式综合交易查询解决方案获“金鼎奖”优秀金融科技解决方案奖
    GNSS模块如何应用在“监控案例”中
    Linux shell编程学习笔记7:只读变量
    元宇宙007 | 沉浸式家庭治疗,让治疗像演情景剧一样!
    选调生、高校人才引进(暂存笔记)
  • 原文地址:https://blog.csdn.net/qq_41890240/article/details/126347441