shell简介+变量

shell

shell介于用户和内核之间,充当翻译官,当用户使用相关命令(Linux命令),shell会把指令转换成二进制传给内核。内核处理完毕后通过shell把内核的执行结果转换成人类能够识别的语言。

Linux中的shell种类:

  • sh:基本淘汰
  • bash:现在Linux默认的shell,是ssh的扩展
  • csh:类C语言的shell,可以编译C语言
  • tcsh:csh的增强
  • nologin:一种特殊的shell,它的作用是禁止用户登录主机

默认情况下使用的shell都是bash

shell语言又叫做脚本语言、动态语言,主要作用就是控制软件和应用程序,一般都是以文本的形式保存,运行时才会进行编译

shell脚本的作用:

  • 自动化运维(最重要⭐)
  • 批量化重复操作
  • 减轻管理人员的工作量
  • 提高业务处理的速度

shell脚本的构成:

  • 脚本申明:解释器,比如 #!/bin/bash
  • 注释信息:#开头的语句都是注释信息,注释可以帮助工作人员更好地理解代码的架构
  • 可执行语句:shell脚本中,所有在Linux命令行中可以执行的命令,都可以作为脚本的可执行语句

shell脚本的运行方式:

  • 赋权执行:给脚本执行权限
    • chmod 777 first.sh
    • ./first.sh,“./”执行当前目录下的文件,该文件必须可执行
    • shell简介+变量_第1张图片
  • 直接执行:一般用于调试脚本的内容
    • bash first.sh
      或者 sh first.sh
      或者 source first.sh,这个命令叫做点命令,也就是“ . ”,这是bash的内部命令,它会实际上地执行文件,其他方式都只是运行文件后反馈结果
    • shell简介+变量_第2张图片

重定向输出
  • 交互式硬件设备的执行方式:
    • 标准输入:比如键盘,输入的结果符合编码规范
    • 标准输出:比如显示器,符合编码规范的命令,给与执行结果
    • 标准错误输出:比如显示器,不符合编码规范的结果,给与错误输出的执行结果
  • 重定向操作:
    • 重定向输出:>,把标准输入保存到指定的文件中,会覆盖原有内容
      • >>,把标准输出保存到指定文件的尾部,相当于追加,并不会覆盖原有内容
    • 重定向错误输出:2>,将错误信息保存到指定的文件,会覆盖原有内容
      • 2>>,追加
      • shell简介+变量_第3张图片
    • 混合输出:&>,既可以保存标准输出,也可以保存标准错误输出
      • &>>,追加
重定向输入:

<:从指定的文件读取数据

shell简介+变量_第4张图片

shell中的变量
  • 变量:描述对象的属性或者参数。存放系统和用户需要使用的特定参数
  • 变量的类型:int - 整型,string - 字符串,true/false - 布尔类型,1.234 - 浮点型(小数)
  • 变量名称:
    • 有固定名称的变量,一般是系统预设
    • 自定义变量名:
      • 不要使用系统命令作为变量名
      • 不要使用中文
      • 不要使用特殊符号,除了“ _ ”
      • 不要使用数字开头
        shell简介+变量_第5张图片
        a的值是临时存储在这个shell环境中的,开另一个shell就找不到这个a的值了。
      • shell中不需要申明变量类型,直接赋值,$的作用是取值,$a也可以写成${a},作用一样,后面这种能防止出错
  • 变量赋值时,引号的用法
    • 打印变量时,加上双引号或者不加引号是弱引用,结果会被变量的值替代
    • 打印变量时,加上单引号是强引用,结果是变量名本身
      shell简介+变量_第6张图片
    • 赋值变量时,双引号和单引号没区别
      shell简介+变量_第7张图片
    • 反撇号(` `):先执行反撇号当中的命令,然后再把命令运行的结果赋值给变量
  • 自定义变量的类型
    • 一般自定义:a=1,b=2
    • 只读变量:readonly a=1
      shell简介+变量_第8张图片
      只读变量无法修改,无法直接撤销(unset),重启环境(bash)才能撤销
  • read 通过命令获取内容,给变量赋值
    • read -p "提示字符" 变量名
      shell简介+变量_第9张图片
  • 变量的作用范围
    • 自定义变量:只在当前的shell中生效
    • 全局变量:
      • 系统预设:对所有用户生效
      • 自定义全局变量:临时声明全局,也是只在当前shell生效
        shell简介+变量_第10张图片
        一般来说我们自定义的变量需要根据条件时常修改,以满足不同条件,一旦作为全局变量,引用的值或者参数是不需要变的。
        另一方面全局变量是所有人都可以引用,会导致程序状态的不确定性,所以无特殊需要,一般不声明。
  • 环境变量:
    • 系统预设:用来设置用户的工作环境
      shell简介+变量_第11张图片
    • 自定义:用于满足个人需求的工作环境,可以随时创建,随时修改,随时删除,系统可以识别到用户所需的操作指令,可以直接运行调用
    • 环境变量类似于全局变量,和全局变量作用几乎一致,但是环境变量是系统本身就可以识别的
  • 位置变量:
    • 命令行输入的参数,在脚本运行时,从脚本的外部通过位置变量给脚本内部的程序传参
    • $n,n是数字,1-9,10以上的数字需要用{n},传参顺序是从左到右
      shell简介+变量_第12张图片
    • $0表示命令本身
  • 预定义变量:
    • 编程语言或脚本解释器提供的,自动设置,自动更新,不能修改
    • $*和$@:表示命令或者脚本需要处理的参数
      • $*:不加引号,会把参数一个一个地处理,加了引号,会当成整体处理
        shell简介+变量_第13张图片
      • $@:加不加引号,都会把参数一个一个地处理
        shell简介+变量_第14张图片
    • $?:表示前一条命令的返回状态码,只有0是表示执行成功或者执行正确,非0一律表示执行出现异常
      shell简介+变量_第15张图片
       
    • $#:特殊的预定义变量,统计一共传了多少个参数
      shell简介+变量_第16张图片
  • shell当中变量的运算符:
    shell简介+变量_第17张图片
    • i++:每次自增1,先赋值再+1
    • ++i:每次自增1,先+1再赋值
    • 非整数运算
      • bc
        shell简介+变量_第18张图片
      • awk

你可能感兴趣的:(Linux,linux,运维,服务器,1024程序员节)