Shell 脚本0基础教学(一)
从这篇文章开始为大家介绍 Shell 脚本。
文章目录
- 前言
- 一、Shell 解析器
- 二、Shell 脚本介绍
- 1. 脚本规范
- 2. 脚本文件执行方式
- 3. 多命令处理
- 三、Shell 变量
- 1. 系统环境变量
- 2. 自定义变量
- 3. 特殊符号变量
- 总结
前言
通过Shell 命令或程序编程语言编写的 Shell 文本文件,就是 Shell 脚本,也叫 Shell 程序。
通过 Shell 命令与编程语言来提高 linux 系统的管理工作效率。
一、Shell 解析器
- Shell 的运行过程
当用户下达指令给操作系统的时候,实际是把指令shell ,经过 shell 的解释,处理后让内核做出相应的动作。系统的回应和输出信息也由 shell 处理,然后显示在用户的屏幕上。
2. Shell 解析器:
查看 linux 系统 centos 支持的 shell 解析器:
cat /etc/shells
效果:
shell 解析器类型:最常用的是 /bin/bash 解析器。
- Linux 系统 默认的解析器是 bash
查看当前系统环境使用的 Shell 解析器类型:
echo $SHELL
echo :用于打印输出数据到终端。
$SHELL :是全局共享的读取解析器类型的环境变量,所有的 Shell 程序都可以读取的变量。
效果:
二、Shell 脚本介绍
1. 脚本规范
(1). 脚本文件后缀名: .sh。
shell 脚本文件就是一个文本文件,后缀名建议使用 .sh 结尾。
(2). 首行格式规范:
#!/bin/bash
表面当前的 shell 脚本文件采用 bash 解析器运行脚本代码。
(3). 注释
- 单行注释:
# 注释内容
- 多行注释:
:<<!
# 注释内容1
# 注释内容2
!
实例:
2. 脚本文件执行方式
1)sh 解析器执行方式:
使用 sh 命令执行脚本文件,本质就是使用 shell 解析器运行脚本文件。
sh 脚本文件
2)bash 解析器执行方式:
使用 bash 命令执行脚本文件,本质就是使用 shell 解析器运行脚本文件。
bash 脚本文件
3)仅路径执行方式:
步骤一:设置可执行权限
chmod a+x 脚本文件
步骤二:执行脚本文件
./脚本文件
实例:
PS : sh 或者 bash 执行脚本文件的方式是直接使用 Shell 解析器运行脚本文件,不需要可执行权限。而 仅路径方式是执行脚本文件自己,需要可执行权限。
3. 多命令处理
就是在 Shell 脚本文件中编写多个Shell 命令。
例子需求:已知目录 /home/book/my_work ,执行脚本 my.sh。脚本需实现 /home/book/my_work/ 目录下创建一个 one.txt 文件,并在文件one.txt文件中增加 “hello world” 内容。
步骤分析:
编辑脚本文件
1)命令1 : touch 创建文件, 文件名 one.txt
2)命令2 : 输出数据 “HelloShell” 到 one.txt 文件中
输出数据到文件中的命令:
数据 >> 文件
实例:
my.sh 脚本文件内容:
效果:
三、Shell 变量
Shell 变量用于存储管理临时的数据,这些数据都是在运行内存中的。
变量的类型:
- 系统环境变量
- 自定义变量
- 特殊符号变量
1. 系统环境变量
系统环境变量是 系统提供的共享变量,是 linux 系统加载 Shell 的配置文件
中定义的变量,共享给所有的 Shell 程序使用。
Shell 的配置文件分类: 一般情况下,我们都是直接针对全局配置进行操作。
1)全局配置文件
/etc/profile
/etc/profile.d/*.sh
/etc/bashrd
2) 个人配置文件
当前用户/.bash_profile
当前用户/.bashrc
环境变量分类:
在Linux系统中,环境变量按照其作用范围不同大致可以分为系统级环境变量和用户级环境变量。
1)系统级环境变量:Shell 环境加载全局配置文件中的变量共享给所有用户所有Shell程序使用,全局共享。
2)用户级环境变量:Shell 环境加载个人配置文件中的变量共享给当前用户的Shell程序使用,登录用户使用。
查看当前 Shell 系统环境变量:
env
查看 Shell 变量(系统环境变量 + 自定义变量 + 函数):
set
常见系统环境变量:
2. 自定义变量
就是自己定义的变量。
分类:
- 自定义的局部变量。
- 自定义常量。
- 自定义的全局变量。
1) 自定义局部变量
定义在一个脚本文件在的变量,只能在这个脚本文件中使用该变量。
①定义:
var_name=value
变量定义规则 :
1.变量名称可以有字母,数字和下划线组成,但是不能以数字开头
2.等号两侧不能有空格
3.在bash环境中,变量的默认类型都是字符串类型,无法直接进行数值运算
4.变量的值如果有空格,必须使用双引号括起来
5.不能使用Shell的关键字作为变量名称
②查询:
区别:花括号方式适合拼接字符串
# 语法1: 直接使用变量名查询
$var_name# 语法2:使用花括号
${var_name}
③删除:
unset var_name
实例:
2)自定义常量
即变量设置值后不可以修改的变量叫常量,也叫只读变量。
readonly var_name
实例:
PS: 删除只读变量(常量):关闭当前 Shell 或子 Shell(退出终端或脚本)。
3)自定义全局变量
在当前脚本文件中定义全局变量,这个全局变量可以在当前 Shell 环境 与 子 Shell 环境都可以使用
。
PS : 父子 Shell 环境介绍。
例如:有 2 个Shell 脚本文件 a.sh 和 b.sh。如果在 a.sh 脚本文件中执行 b.sh 脚本文件,那么 a.sh 就是父 Shell 环境, b.sh 就是子 Shell 环境。
export var1 var2
实例 :
要求 :测试全局变量在子Shell中是否可用,在父Shell中是否可用。案例实现步骤:
1. 创建2个脚本文件demo1.sh和demo2.sh
2. 编辑demo1.sh
命令1:定义全局变量var1
命令2:执行demo2.sh脚本文件
3.编辑demo2.sh
输出全局变量var1
4. 执行demo1.sh脚本文件
效果:
3. 特殊符号变量
- $n
用于接收脚本文件执行时传入的参数
$n
- $0 用于获取当前脚本文件名称
- $1~$9,代表获取第一输入参数到第9个输入参数
- 第 10 个以上的输入参数获取参数的格式:${数字}
执行脚本文件并传入参数语法:
sh 脚本文件 输入参数1 输入参数2....
实例:
- $#
获取所有输入参数的个数
$#
实例:
- $* , $@
用于获取所有的输入参数
$*
$@
$ * 与 $@区别 :
1. 不使用双引号括起来,功能一样:
$* 和 $@ 获取所有输入参数,格式为:$1 $2 ... $n.2. 使用双引号括起来:
"$*" 获取的所有参数拼接为一个字符串,格式为:"$1 $2 . .$n"。
"$@" 获取一组参数列表对象,格式为:"$1" "$2" "$n"使用循环打印 (for) 所有输入参数可以看出区别。
实例:
循环语法:
for var in 列表变量
do # 循环开始命令 # 循环体
done # 循环结束
实例:
4) $?
用于获取 上一个 Shell 命令的退出状态码
,或者是函数的返回值。
PS : Shell 命令的执行都会有一个返回值,这个返回值用于说明命令执行是否成功。返回0:执行成功。返回1:执行失败。
$?
实例:
- $$
用于获取当前Shell 环境的进程 ID 号。
$$
实例:
总结
下一篇文章继续为大家介绍 Shell 脚本。