目录
什么是Shell
- Linux系统中运行的一种特殊程序
- 在用户和内核之间之间充当“翻译官” ——>shell会将所接收到的命令转换成计算机所能识别的二进制语言
- 用户登陆Linux系统时,自动加载一个Shell程序
- Bash是Linux系统中默认使用的Shell程序
内核:用于调用计算机硬件资源
shell:将用户指令转换成计算机语言让内核去调用计算机硬件资源
bash是一个文件,linux系统中万物皆文件
bash文件位于/bin/bash
用户的登录Shell
- 登录后默认使用的Shell程序,一般为/bin/bash
- 不同Shell的内部指令、运行环境等会有所区别
Shell脚本
一、Shell脚本概述
概念
- 将要执行的命令按顺序保存到一个文本文件
- 给该文件可执行权限
- 可结合各种Shell控制语句以完成更复杂的操作
Shel脚本应用场景
- 重复性操作
- 交互性任务
- 批量事务处理
- 服务运行状态监控
- 定时任务执行
- ......
二、Shell编程规范
1、创建Shell 程序的步骤
- 创建一个包含命令和控制结构的文件。
- 编辑完之后修改这个文件的权限使它可以执行 #使用chmod +x 文件名
- 检测语法错误(命令集合是否正确) #set -x 追踪脚本是否有故障
- 执行脚本./text.sh
2、Shell脚本的构成
- 使用vim文本编辑器
- 每行一条Linux命令,按执行顺序依次编写
vim [文件名].sh
1.脚本申明(解释器):若第一行为“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行,#!/bin/bash为默认解释器。还有其它类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect。
2.注释信息:以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行。
3.可执行语句:比如echo命令,用于输出" "之间的字符串
#!/bin/bash
# This is my first Shell-Script.我的第一个脚本
cd /home
echo "宝宝看:"
pwd
echo "xiang ni le" > lc.txt
echo "想你了:"
cat lc.txt
Shell是一个面向字符串的编程语言,可以跟Python之类的其他语言配合起来,比如某个复杂的功能使用一个Python脚本来实现,然后在Shell中调用这个脚本实现较复杂的功能;或者反过来,在Python脚本中调用外部的Shell脚本来提高自动化的效率,也是可以的。
编程语言类型
编译型 | C 、 C++ 、 JAVA 、 GO | 代码文件需要先编译后,程序才能执行 |
---|---|---|
解释型 | PYTHOBN、Shell、PHP | 代码是边解释边运行 |
总结:shell脚本功能:完成自动化运维工作,批量完成重复操作,结合crontab完成周期性任务
3、Shell脚本的执行
赋予可执行权限
- 使脚本具有可执行属性
方法一:指定路径的命令,要求文件必须有 x 权限。
chmod +x /root/test.sh
指定绝对路径:/root/test.sh
指定相对路径:./first\.sh -
3.1 脚本文件路径(绝对路径与相对路径)
必须有执行(x)权限
以根目录下的text.sh为例:
方法二:指定Shell来解释脚本,不要求文件必须有 x 权限。./text.sh #相对路径 /root/text.sh #绝对路径
sh 脚本路径:sh first.sh
source 脚本路径:. first.sh 或者 source first.sh
三、重定向与管道操作
1、交互式硬件设备
- 标准输入:从该设备接收用户输入的数据
- 标准输出:通过该设备向用户输出数据
- 标准错误:通过该设备报告执行出错信息
类型 | 设备文件 | 文件描述编号 | 默认设备 |
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
2、重定向操作的符号用法
类型 | 操作符 | 用途 |
重定向输入 | < | 从指定的文件中读取数据,不是从键盘输入读取 |
重定向输出 | > | 将输出的结果保存在指定的文件中(覆盖原文件) |
>> | 将输出的结果追加在指定文件的末尾 | |
重定向错误输出 | 2> | 将错误信息保存在指定的文件(覆盖原文件内容) |
2>> | 将错误信息追加在指定文件的末尾 | |
混合输出 | &> | 将标准输出和标准错误信息都保存在同一个文件中 |
3、管道符的运用
管道符的作用是连接两个命令,将第一个命令的标准输出作为第二个命令的标准输入。 同一行命令中可以使用多个管道符。(管道符的使用前提,一定是管道符前面的命名有输出结果,后面的命令是搭配着输出结果进行操作)
四、Shell变量的作用、类型
1、变量的作用
用来存放系统和用户需要使用的特定参数(值)
- 变量名:使用固定的名称,由系统预设或用户定义
- 变量值:能够根据用户设置、系统环境的变化而变化
2、变量的类型
- 自定义变量:由用户自己定义、修改和使用
- 特殊变量:环境变量、只读变量、位置变量、预定义变量
3、自定义变量
3.1
变量名=变量值 #变量名以字母或下划线开头,区分大小写,建议全大写
echo $变量名 #查看变量的值
3.2 赋值时使用引号
- 双引号:允许通过$符号引用其他变量值
- 单引号:禁止引用其他变量值, $视为普通字符
- 反撇号:命令替换,提取命令执行后的输出结果,``和$(…)作用相同
1、双引号允许通过$符号引用其变量值
2、单引号禁止引用其他变量值, $视为普通字符
3、`...` $(...) 提取里面的命令执行后的结果 (先里后外执行)
3.3 交互式定义变量(read)
read命令获取输入内容
-p | 提示用户的信息 |
-n | 定义字符数 |
-s | 不显示用户输入的内容,常用于输入密码read -s -p "input your password:" pass |
-t | 定义超时时间,超过多长时间没输自动退出从文件读取内容赋值给变量(默认10s) |
stty -echo //关闭屏幕回显
stty echo //开启屏幕回显1、从文本读取内容赋值给变量
1.从文本读取内容赋值给变量
read -p 提示信息 变量名
echo $变量名
在脚本中编写:
1、环境变量
- 由系统提前创建,用来设置用户的工作环境
- 配置文件:/etc/profile(全局配置文件) 、~/.bash_profile(用户的独立配置文件)
2、只读变量
用于变量值不允许被修改的情况