Blog.036 Shell 脚本基础及变量
本章目录
1. Shell 脚本概述
1.1 Shell 脚本的概念
1.2 Shell 脚本应用场景
1.3 Shell 的作用
1.4 Shell 基本构成
1.5 Shell 脚本的执行
2. 脚本执行方法的区别
3. 重定向操作
3.1 交互式硬件设备
3.2 重定向操作类型
4. 管道操作符号
5. Shell 脚本变量
5.1 变量的定义
5.2 变量的格式
5.3 变量名命名规则
5.4 查看变量名
6. 自定义变量
6.1 引号的使用
6.2 从键盘输入内容为变量赋值
6.3 设置变量的作用范围
7. 整数变量的运算
7.1 expr 进行运算
7.2 echo 加 $[ ]
7.3 echo 加 $(( ))
Shell Script,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。
- 将要执行的命令按顺序保存到一个文本文件
- 要给该文件可执行权限
- 可以结合各种Shell 控制语句以完成更复杂的操作
- 重复性操作
- 交互性任务
- 批量事务处理
- 服务运行状态监控
- 定时任务执行
- ......

- Shell:命令解释器,介于系统内核与用户之间,一种被称为解释性语言或者脚本语言的计算机语言。充当"翻译官"的作用;
- Linux 系统中运行的 一种特殊程序,用户登录Linux 系统时,自动加载一个Shell 程序;
- Linux 系统中默认使用的 Shell 程序是 Bash ,文件位于 /bin/bash;
- 不同Shell 的内部指令,运行环境会有区别。
- 脚本申明(解释器):若第一行为“#!/bin/bash” ,表示此行一下的代码语句是通过/bin/bash程序来结实执行,#!/bin/bash为默认解释器,还有其他类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect。
- 注释信息:以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时将不被执行。
- 可执行语句:比如echo命令,用于输出“ ”之间的字符串。


(1)指定路径的命令,要求文件必须有执行(x)权限;
(2)指定shell来解释脚本,不要求文件必须有写(x)的权限:
- sh脚本路径
- source脚本路径

- bash+脚本 : 新开一个bash 环境,然后在这个新的bash 环境中运行脚本内程序;
- 文件名直接执行: 这个方法是将脚本作为一个可执行程序,所以,要写脚本的绝对路径或者相对路径。由于脚本本身作为可执行程序,所以,会创建名为脚本名(test.sh) 的子进程;
- source或者点 " . ":这两个命令都是在当前 shell 环境下,使用当前的解释器读取并执行命令,不会新开一个shell 环境或者 其他的子进程。由于这两个命令都是将 脚本作为参数,所以,不需要脚本有执行权限。








(1)标准输入:从该设备接收用户输入的数据;
(2)标准输出:通过该设备向用户输出数据;
(3)标准错误输出:通过该设备报告执行出错信息。
| 类型 | 设备文件 | 文件描述编号 | 默认设备 |
|---|---|---|---|
| 标准输入 | /dev/stdin | 0 | 键盘 |
| 标准输出 | /dev/stdou | 1 | 显示器 |
| 标准错误输出 | /dev/stderr | 2 | 显示器 |
| 类型 | 操作符 | 用途 |
| 重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
| 重定向输出 | > | 将输出结果保存到指定的文件(覆盖原有内容) |
| >> | 将输出结果追加到指定的文件尾部 | |
| 标准错误输出 | 2> | 将错误信息保存到指定的文件(覆盖原有内容) |
| 2>> | 将错误信息追加到指定的文件中 | |
| 混合输出 | &> | 将标准输出、标准错误的内容保存到同一个文件中 |



- 管道操作符号 " | " ,将左侧命令输出结果,作为右侧命令的处理对象
- 命令行格式:
- cmd 1 | cmd 2 [.....| cmdn]

- 管道符号 加上 xargs ,可以将前面的结果作为参数传递给后面

变量就是会变的量。
可以通过变量名得到变量值。在内存上开辟一个记录数据的空间,给它起个名字,如name,num 等,这些就是变量名。而存放在该空间的数据就是变量的值。
变量名=变量值
- 变量名必须是以字母或下划线开头,名字中间只能由字母,数字,下划线 "_" 组成,不能有小数点,特殊字符,空格,标点符号等;
- 变量名的长度不得超过255 个字符;
- 变量名在有效范围内必须是唯一的;
- 变量名不能和系统命令,系统变量等冲突;
- 变量名可以将开头字母打下,以防和系统命令等冲突。
- 可以用echo $变量名,查看变量的值

格式:变量名=变量值
- 双引号 " ":允许通过$ 符号引用其他变量值,不取消特殊符号的释义;

- 单引号 ' ':禁止引用其他变量值,$视为普通字符,取消特殊符号的释义;

- 反撇号 ` `:命令替换,提取命令执行后的输出结果,作用与 $( ) 相同。

格式:read [-p “ 提示信息 ”] 变量名
- 格式:
- export 变量名
- export 变量名=变量值

- 局部变量:
- 直接设置的变量是局部变量,只在当前shell 环境生效,如果重开终端,或者开启一个新的shell 环境,或者登陆其他用户账号,则变量失效。

- 全局变量:
- 可以在全局都有效的变量,不管是新的bash环境,还是其他用户账号,都会有效。

- 格式:expr 变量1 运算符 变量2 [运算符 变量3]....

- 常用运算符:
- 加法运算:+
- 减法运算:-
- 乘法运算:*
- 除法运算:/
- 求模(取余)运算 : %


-

浙公网安备 33010602011771号