目录
- 一、Shell脚本的概述
- 二、Shell的作用
- 2.1、用户的登录Shell
- 2.2、Shell脚本的分类
- 三、Shell脚本的构成
- 1、编写shell脚本的规范
- 2、运行shell脚本
- 3、方法一 、指定路径命令,要求文件必须有 x 权限
- 4、方法二 、指定shell来解释脚本,不要求文件必须要有 x 权限
- 3、运行Shell脚本的总结
- 四、重定向与管道操作
- 1、交互式硬件设备
- 2、重定向操作
- 1、重定向输入
- 2、重定向输出
- 3、重定向追加
- 4、标准错误输出
- 5、标准错误追加
- 6、混合输出
- 3、管道操作符号“|”
- 五、Shell变量的作用、类型
- 1、变量的作用
- 2、变量的类型
- 六、自定义变量
- 1、定义一个新的变量
- 2、查看变量的值
- 3、赋值时使用引号
- 4、从键盘输入内容为变量赋值
- 5、设置变量的作用范围
- 6、整数变量的运算
- 七、特殊的Shell变量
- 1、环境变量
- 2、常见的环境变量
- 3、只读变量
- 4、位置变量
一、Shell脚本的概述
1、Shell脚本的概念:
将要执行的命令按顺序保存到一个文本文件
给该文件可执行权限
可结合各种Shell控制语句以完成更复杂的操作
2、Shell脚本应用场景:
重复性操作
交互性任务
批量事务处理
服务运行状态监控控
定时任务执行
二、Shell的作用
Shell的作用一命令解释器,“翻译官”
介于系统内核与用户之间,负责解释命令行
2.1、用户的登录Shell
登录后默认使用的Shell程序,一般为 /bin/bash。
不同Shell的内部指令、运行环境等会有所区别
bash: 基准于GNu的框架下发展出的she11
csh: 语法有点类似于c语言的she11
tcsh: 整合了csh,提供更多的功能
sh: 已经被bash所替换。
nologin: 奇怪的shel1,这个shell可以让用户无法登录主机
注: bash (/bin/bash) 是目前大多数 Linux 版本采用的默认 shell。
Shell是一个面向字符串的编程语言,可以跟Python之类的其他语言配合起来,比如某个复杂的功能使用一个thon脚本来实现,然后在shel1中调这个脚本实现较复杂的功能:或者反过来,在Python脚本中调用外部的Shell脚本来提高自动化的效率,也是可以的。
2.2、Shell脚本的分类
面向对象 : JAVA , PYTHON , C++, C# , GO
面向过程 : C , shell
强类型语言: JAVA , C , C++ , C# , GO
编译型语言,执行前需要先编译,运行速度快
弱类型语言: PYTHON , Shell , PHP
解释性语言,不需要编译即可直接执行,常用于作脚本
三、Shell脚本的构成
1、编写shell脚本的规范
1)脚本声明:
#!/bin/bash
2)注释信息: 行首以#号开头定义注释信息,被注释的行内容将不会被执行
3)可执行语句:编写要执行的脚本代码
cd /opt 进入opt目录
vim first.sh 进入文件里编写好shell脚本
2、运行shell脚本
3、方法一 、指定路径命令,要求文件必须有 x 权限
chmod +x first.sh
给这个shell脚本增加执行权限
可以使用相对路径和绝对路径来运行脚本
如果不增加权限的话就会使用不了shell脚本,不管是用绝对路径和相对路径都显示权限不足
通过脚本就可以查看到在boot目录里找到以vm为开头的文件了,且不需要换目录查看
4、方法二 、指定shell来解释脚本,不要求文件必须要有 x 权限
1、sh
sh 脚本路径: sh first.sh
2、source
source 脚本路径:
.first.sh 或者 source first.sh
3、运行Shell脚本的总结
1)用绝对/相对路径指定脚本文件运行,需要执行用户拥有执行权限x,脚本会在子shell环境中运行
2)用 bash/sh 程序指定脚本文件运行,不需要执行权限,脚本会在子shell环境中运行
3)用 source/. 指定脚本文件运行,脚本会在当前shell环境中运行(会影响当前所在目录、变量的值 等因素)
四、重定向与管道操作
1、交互式硬件设备
·标准输入: 从该设备接收用户输入的数据
·标准输出: 通过该设备向用户输出数据
·标准错误: 通过该设备报告执行出错信息
类型 | 设备文件 | 文件描述编号 | 默认设备 |
---|---|---|---|
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
2、重定向操作
重定向操作
1、重定向输入
重定向输入前要先关闭防火墙
举例:
使用文件里的数据来设置为用户的密码
2、重定向输出
如果文件不存在,重定向输出也会创建一个文件来进行存放内容
3、重定向追加
4、标准错误输出
之将错误的信息放到指定的文件中,并且覆盖
5、标准错误追加
不覆盖之前错误内容,在内容的最后面进行追加
6、混合输出
将正确和错误的,都可以放在一个文件里
扩展:
2>&1 : 将标准错误输出重定向到标准输出
本来1-->屏幕(1指向屏幕)
执行>log后,1-->log.txt (1指向log.txt)
执行2>&1后,2-->1
(2指向1,而1指向log.txt,因此2也指向了log.txt)
3、管道操作符号“|”
将左侧的命令输出结果,作为右侧命令的处理对象
五、Shell变量的作用、类型
1、变量的作用
·用来存放系统和用户需要使用的特定参数 (值)
·变量名:使用固定的名称,由系统预设或用户定义
·变量值:能够根据用户设置、系统环境的变化而变化
2、变量的类型
·自定义变量: 由用户自己定义、修改和使用
·特殊变量:环境变量,只读变量,位置变量,预定义变量
六、自定义变量
1、定义一个新的变量
变量名为以字母或下划线开头,区分大小写,建议全大写
变量名=变量值
2、查看变量的值
echo $变量名
如果中间有空格,加上引号括起来
把这个变量名加上大括号以防混淆
3、赋值时使用引号
·双引号: 允许通过$符号引用其他变量值
·单引号: 禁止引用其他变量值,$视为普通字符
·反撇号: 命令替换,提取命令执行后的输出结果,·...·等同于 $(...)
4、从键盘输入内容为变量赋值
创建一个shell脚本
给shell脚本提高权限
使用运行命令,看到设置的变量为脚本里设置的zhangsan
read [-p "提示信息"] 变量名
在shell脚本里设置一个read 通过键盘获取变量值,-p可以显示提示信息
5、设置变量的作用范围
格式1: export 变量名
格式2: export 变量名=变量值
设置临时的全局变量,主机重启后就不生效了
实现永久开启变量
vim /etc/profile 进入开机自启的配置文件
设置为全局变量
如何设置完不想要重启,可以输入以下命令
source /etc/profile
6、整数变量的运算
expr 变量1 运算符 变量2 [运算符 变量3]...
或者使用双括号来运算
使用中括号来运算
使用let命令来进行运算
let i=10+20 ; echo $i
let i++ i-- 相当于 i=$[i + 1] 或 $[i - 1]
i+=2 i-=2 相当于 i=$[i + 2] 或 $[i - 2]
七、特殊的Shell变量
1、环境变量
·由系统提前创建,用来设置用户的工作环境
·配置文件: /etc/profile – 全局有效
~/.bash _profile – 只对当前用户有效
2、常见的环境变量
通过可执行文件复制到PATH环境变量所指定的目录中
vim /etc/profile
进入环境变量配置文件里
export PATH=$PATH:/opt
不要忘记添加原来的值,不设置的话原来的值就没有了
source /etc/profile 重现加载配置文件
没有添加PATN原有的配置文件的处理方法
/usr/bin/vi /etc/profile
进入这个配置文件里删除末尾的命令
source /etc/proile 重启启动配置文件
命令 | 解释 |
---|---|
PATH | 系统命令搜索路径 |
PWD | 当前所在目录 |
USER | 当前登录用户 |
HOME | 当前登录用户的家目录 |
SHELL | 当前登录用户的shell环境 |
LANG | 当前系统的语言和字符集编码 |
HISTSIZE | 历史命令条数 |
3、只读变量
用于变量值不允许被修改的情况
4、位置变量
表示 $n ,n为1~9之间的数字
vim third.sh 创建一个文件,在里面设置shell脚本
设置完后进行增权
chmod +x third.sh
$0 为脚本本身,$1 ~ $9 第一个到第九个位置变量,代表脚本后面跟的以空格相间隔的参数
由图可以看见,超过9的数是以$1为开头,后面加个0的数值
当超过第9位的变量时,可以加上大括号表示
例如:${10} 表示第10位置变量
这样就可以看见最后一位设置的就是指定的数值了
$* 不加双引号时,代表脚本后面跟的以空格相间隔的所有参数;
$@ 不加双引号时,代表脚本后面跟的以空格相间隔的所有参数;
$*: 加上双引号后,会把脚本后面跟的以空格相间隔的所有参数当作一个整体
$@ :加上双引号后,效果不变,仍然会把每个参数当作一个个体
加入一个$#表示命令或者脚本要处理参数的个数
$? : 代表上一条命令执行是否正常/成功,命令执行正常返回0,非0值均代表命令执行异常