shell变成规范与变量

249 阅读4分钟

什么是shell

shell是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令并进行解释,将需要执行的操作传递给内核执行,并输出执行

(比如说你要播放音乐,你的计算机通过你的shell输入的打开音乐的命令,shell在告诉操作系统的内核用户希望打开音乐,内核在通过cpu调度、内存管理、磁盘输入输出等工作,将硬件调动,这时硬件声卡才会工作,硬件才是实际的工作者)

shell介于系统内核与用户之间,负责解释命令行 微信截图_20220901153440.png

shell脚本的概念

  • 将执行的命令按顺序保存到一个文本文件
  • 给该文件可执行权限
  • 可结合个种shell控制语句以完成更复杂的操作

shell脚本的应用场景

  • 重复性操作
  • 交互性任务
  • 批量事务处理
  • 服务运行状态监控
  • 定时任务执行

Linux中有哪些shell

查看/etc/shells这个文件

  • bash:基于GNU的框架下发展出来的shell
  • csh:语法有点类似于c语言的shell
  • tcsh:整合了csh,提供更多的功能
  • sh:已经被bash所替代
  • nologin:奇怪的shell,这个shell无法登录主机 :bash是目前大多数linux采用的默认shell

shell脚本的作用

  • 自动化运维
  • 批量化重复操作可以编写脚本结合计划任务自动周期运行
  • 减轻管理员工作量
  • 提高处理文本文件的速度
  • 避免配置出错

shell脚本的构成

  • 脚本声明(解释器):第一行为“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行,#!/bin/bash为默认解释器
  • 注释信息:以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行
  • 可执行语句:比如echo命令,用于输出“”之间的字符串

重定向操作

  • 标准输入:从该设备接收用户输入的数据
  • 标准输出:通过该设备向用户输出的数据
  • 标准错误:通过该设备报告执行出错信息

微信截图_20220901165935.png

由于Shell脚本“批量处理”的特殊性,其大部分操作过程位于后台,不需要用户进行干预,因此要学会提取、过滤执行信息变得十分重要,所以我们需要重定向和管道。

管道符“|”

作用

  • 将管道符号“|"左侧的命令输出的结果,作为右侧命令的输入(处理对象)
  • 同一行命令中可以使用多个管道符

重定向

微信截图_20220901171146.png

微信截图_20220901171844.png

shell变量

变量的作用

用来存放系统和用户需要使用的特定参数(值)

  • 变量名:使用固定的名称,由系统预设或用户定义
  • 变量值:能够根据用户设置、系统环境的变化而变化

变量的类型

  • 自定义变量:由用户自己定义、修改和使用
  • 特殊变量:环境变量,只读变量,位置变量,预定义变量

变量名要求

  • 区分大小写
  • 只能以字母或下滑线“_”
  • 命名只能使用字母、数字和下划线“_”组成

自定义变量的方法

直接赋值(变量名=变量名)

微信截图_20220901173632.png

赋值时使用引号的效果

微信截图_20220901183144.png

  • // 双引号——允许通过 $ 符号引用其他变量值
  • //单引号——禁止引用其他变量, $原样显示
  • //反撇号——命令替换,提取命令执行后的输出结果 和$(命令)作用相同

键盘输入为变量赋值(read)

  • read 变量名(没有提升信息)继续输入变量值即可赋值

  • read -p (显示提示信息) 可追加输出需要显示的提示信息

微信截图_20220901184502.png

删除变量(unset)

微信截图_20220901184930.png

自定义变量作用范围

  • 默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或新的子Shell环境时局部变量将无法再使用。

  • 可以通过内部命令export指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用。(命令格式:export 变量名)

自定义变量永久启动

在/etc/profile(全局配置文件)中添加 export 变量名

变量的算术运算

整数变量的算术运算(Shell 默认只支持整数运算)

微信截图_20220901190549.png

使用整数变量的算术运算赋值

  • 变量=$((数值或变量1 运算符 数值或变量2))

  • 变量=$[数值或变量1 运算符 数值或变量1]

  • 变量=$(expr 数值或变量1 运算符 数值或变量2)

  • let 变量=数值或变量1运算符数值或变量2 (数值与运算符之间不需要空格)

微信截图_20220901190450.png

环境变量

命令:env(查看到当前工作环境下的环境变量)

更多工行建行股份回购已经以哦米见过忽然微信截图_20220901193122.png

只读变量

命令格式

readonly 变量=变量值

微信截图_20220901200018.png 在配置文件中添加只读变量

微信截图_20220901201326.png

位置变量

shell脚本执行命令操作时会带有很多变量$n,文件中执行的n数值依次递增,用于代表某个位置的变量

微信截图_20220901202149.png

微信截图_20220901202124.png

预定义变量

微信截图_20220904200532.png