Linux| 青训营笔记

58 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天

Shell

Shell 脚本程序是 Linux 用到的脚本, 完成一些自动化操作
除了能够支持各种变量与参数外,还提供了像判断,循环等高级编程语言有的控制流程的特性

shell 脚本的工作方式有两种:交互式和批处理。

  • 交互式(interactive) : 用户输入一条就立即执行
  • 批处理(batch): 由用户事先编写好一个完整的shell脚本,shell会一次性执行脚本中诸多的命令。

编写中可能用到 Vim 编辑器:

Shell 基础语法

变量

变量类型
  1. 局部变量:局部变量在脚本或命令中定义,仅在当前 shell 实例中有效,其他 shell 启动的程序不能访问局部变量。
  2. 环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  3. shell 变量:shell 变量是由shell 程序设置的特殊变量。shell 变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了 shell 的正常运行
变量操作
  1. 创建:

    1. 普通: name="test" (=两边不可有空格)
    2. 局部: local name="test"
    3. 只读: name="only_read" -> readonly name (使用 readonly 标识后的变量,不可被修改)(常量)
  2. 使用:

    1. echo $name 或者 echo ${name} (推荐使用大括号版)
    2. ${}中使用“#”获取长度
  3. 删除:

    1. unset name;(删除之后不可访问,删除不掉只读变量)
字符串
  1. 单引号: var='test' 原样输出,变量无效
  2. 双引号: var="my name is ${name}" 变量有效
数组 :

只支持一维数组

  1. 定义: array_name=(li wang xiang zhang) (小括号做边界、使用空格分离
  2. 获取: echo ${array_name[0]}
  3. 赋值: array_name[0]="li"
传参
  • 获取参数值:

    • $0 : 固定,代表执行的文件名
    • $1 : 代表传入的第1个参数
    • $n : 代表传入的第 n 个参数
  • $#:参数个数

  • $*: 以一个单字符串显示所有向脚本传递的参数。如"$*"用「"」括起来的情况、以"11 2 … $n"的形式输出所有参数

  • $@:与$*相同,但是使用时加引号,并在引号中返回每个参数。

  • $$:脚本运行的当前进程号

  • $!:后台运行的最后一个进程的ID

  • $?: 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

  • $* 与 $@ 区别

    • 相同点:都是引用所有参数。
    • 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。

Vim 编辑器

1 : shell 介绍 2: CSDN-shell