这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天
Shell
Shell 脚本程序是 Linux 用到的脚本, 完成一些自动化操作
除了能够支持各种变量与参数外,还提供了像判断,循环等高级编程语言有的控制流程的特性
shell 脚本的工作方式有两种:交互式和批处理。
- 交互式(interactive) : 用户输入一条就立即执行
- 批处理(batch): 由用户事先编写好一个完整的shell脚本,shell会一次性执行脚本中诸多的命令。
编写中可能用到 Vim 编辑器:
Shell 基础语法
变量
变量类型
- 局部变量:局部变量在脚本或命令中定义,仅在当前 shell 实例中有效,其他 shell 启动的程序不能访问局部变量。
- 环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
- shell 变量:shell 变量是由shell 程序设置的特殊变量。shell 变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了 shell 的正常运行
变量操作
-
创建:
- 普通:
name="test"(=两边不可有空格) - 局部:
local name="test" - 只读:
name="only_read" -> readonly name(使用 readonly 标识后的变量,不可被修改)(常量)
- 普通:
-
使用:
echo $name或者echo ${name}(推荐使用大括号版)- 在
${}中使用“#”获取长度
-
删除:
unset name;(删除之后不可访问,删除不掉只读变量)
字符串
- 单引号:
var='test'原样输出,变量无效 - 双引号:
var="my name is ${name}"变量有效
数组 :
只支持一维数组
- 定义:
array_name=(li wang xiang zhang)(小括号做边界、使用空格分离 - 获取:
echo ${array_name[0]} - 赋值:
array_name[0]="li"
传参
-
获取参数值:
- $0 : 固定,代表执行的文件名
- $1 : 代表传入的第1个参数
- $n : 代表传入的第 n 个参数
-
$#:参数个数 -
$*: 以一个单字符串显示所有向脚本传递的参数。如"$*"用「"」括起来的情况、以"2 … $n"的形式输出所有参数 -
$@:与$*相同,但是使用时加引号,并在引号中返回每个参数。 -
$$:脚本运行的当前进程号 -
$!:后台运行的最后一个进程的ID -
$?: 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 -
$*与$@区别- 相同点:都是引用所有参数。
- 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。
Vim 编辑器
1 : shell 介绍 2: CSDN-shell