什么是Shell?

Shell是一共命令解释器,它接收应用程序/用户命令,然后调用系统内核。

image-20220915110138428

我的Centos虚拟机下的Shell解析器

image-20220915110527554

Shell脚本入门

  • 指定解析器

    #!/bin/bash
  • 执行文件

    #example file [hello.sh]
    sh  hello.sh #创建一个子shell执行脚本
    bash hello.sh
    ./hello.sh #这种方法运行,需要获取文件的执行权限
    source hello.sh #当前会话执行脚本
    . hello.sh

    source命令的作用

    • 刷新当前shell环境
    • 执行shell脚本

变量

查看所有环境变量命令env printenv

  • 常用的系统变量

    $HOME $PWD $SHELL $USER

  • 定义变量

    变量名=变量值 【局部变量】

    export 变量名 【提升为了全局变量】

    等号前后不能有空格!!!

  • 撤销变量

    unset 变量名

  • 定义只读变量

    readonly 变量名=变量值

    只读变量不允许unset

    image-20220915150150006

  • 全局变量的注意点

    image-20220915145244001

    如图可以得出结论:

    • 全局变量可以使用export将普通变量提升为全局变量

    • 内层bash修改全局变量的值不会对外层bash全局变量产生修改,只会对内层bash的内存bash产生修改

  • 特殊变量

    • $n 位置参数

      n不是字母n,而是某个数字

      image-20220915152601419

      image-20220915152543203

    • $# 参数个数

      不统计$0

      image-20220915164957313

      image-20220915165019366

    • $* 表示命令行的所有参数,将其看成一个整体

      $@ 表示命令行的所有参数,可以看成一个数组

      但是,下图无法看出区别

      image-20220915165328353

      image-20220915165348785

    • $?

      最后一次执行命令的返回状态,变量为0表示上一次正确执行

      image-20220915165811068

运算符

  • 使用expr计算

    image-20220915170052956

  • 使用 $((运算操作)) $[运算操作]

    image-20220915170425071

流程控制

  • if判断

    image-20220915201429731

    image-20220915201558911

  • case判断

    image-20220915202106544

    image-20220915202134228

  • for循环

    for ((初始值;循环控制条件;变量变化))
    do
      程序
    done

    image-20220915204117310

    image-20220915204102103

    for 变量 in 列表
    do
      循环体
    done

    image-20220915204937554

    image-20220915205013497

    image-20220915205309989

  • while循环

    while [ 条件表达式 ]
    do
      程序
    done

    image-20220915210235570

    image-20220915210252190

读取输出

read (option) (param)

  • option
    • -p 读取时显示的提示符
    • -t 等待时间,如果不加-t表示一直等待
  • param
    • 指定读取的变量名

image-20220915215526872

image-20220915215551476

小练习

  • 相加计算

    image-20220915170924024

    image-20220915170937869