目录
如果你想让脚本全局运行或者可以补全,要将脚本放入$PATH路径下
使用1和2执行脚本,是会新开一个bash环境去执行,不影响当前bash环境,而如果使用3去执行脚本,会直接在当前环境执行。
面向过程语言 开发的时候 需要一步一步执行
-
做一件事情,排出个步骤,第一步干什么,第二步干什么,如果出现情况A,做什么处理,如果出现了情况B,做什么处理
-
问题规模小,可以步骤化,按部就班处理
-
以指令为中心,数据服务于指令
-
C,shell
面向对象语言 开发的时候将任务当成一个整体
-
将编程看成是一个事物,对外界来说,事物是直接使用的,不用关心事物内部的情况。而编程就是设置事物能够完成功能。
-
一种认识世界、分析世界的方法论。将万事万物抽象为各种对象
-
类是抽象的概念,是万事万物的抽象,是一类事物的共同特征的集合
-
对象是类的具象,是一个实体
-
问题规模大,复杂系统
-
以数据为中心,指令服务于数据
-
java,python,golang等 云 go k8个字母s 平台
shell将人类使用的高级语言翻译成二进制,也可以将二进制翻译成高级语言
cat text.sh
echo“hello ” 硬件
人类写了一个命令集合,然后用bash (shel1) 去翻译给硬件执行
bash text.sh
Shell脚本概述
Shell脚本的概念
-
将要执行的命令按顺序保存到一个文本文件
-
给该文件可执行权限
-
可结合各种Shell控制语句以完成更复杂的操作
Shell脚本应用场景
-
重复性操作
-
交互性任务
-
批量事务处理
-
服务运行状态监控
-
定时任务执行
shell脚本的构成
1.脚本电明(解释器):第一行开头"#!/bin/bash"表示此行以下的代码语是通过/in/bash程序来解释执行。#!/bin/bash为默认的解释器还有其他类型的解释器,#! /bin/python #! /bin/expect
2.注释信息: 以#开头的语句表示为注释信息
3.可执行语句: 比如echo命令用于输出” "之间的字符串
脚本的组成
1.声明解释器
2.注释信息
3.执行命令
#! /bin/bash
#这是我的第一个脚本
cd /opt
ls
执行脚本 1.直接调用shell 解释器 加上 脚本的名字bash 脚本名 不需要加上权限
2.路径/脚本 路径:绝对相对 但是这个需要权限
3.source (.) 加脚本 名字 不建议使用 不需要权限 会修改目前的环境内容,会有一些问题
为什么命令可以补全? 运行权限如果你想让脚本 全局 运行 (补全) ,将脚本放入SPATH路径下 shell 脚本的本质程序
脚本搭建yum仓库
脚本执行逻辑和执行方式
脚本执行逻辑
1、顺序执行:程序按从上到下顺序执行
2、选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
3.循环执行:程序执行过程中需要重复执行多次某段语句
如果你想让脚本全局运行或者可以补全,要将脚本放入$PATH路径下
使用1和2执行脚本,是会新开一个bash环境去执行,不影响当前bash环境,而如果使用3去执行脚本,会直接在当前环境执行。
脚本错误及调试
1.命令错误
不会影响接下来的 命令执行, 但是本条命令不执行
bash -x 脚本模拟执行后 发现错误
2.语法错误
直接影响脚本无法正常运行
bash -n 脚本 检查语法错误
3.逻辑错误
只能自己去筛查
了解: 加一些 脚本的安全选项
set -e 出错就停止
set -u 变量不存在就停止
重定向操作
重定向: 改变电脑数据的输出方向
默认 电脑数据的输出方向是屏幕
你发了一条指令给电脑操作, 电脑会回复结果给你,结果是一定显示在屏幕上
我们称为 : 标准输出
如果电脑没有正确回复
我们称为: 错误输出
我们通过 键盘 鼠标 扫描仪 话筒 等设备输入给电脑的指令
我们称为:标准输入
改变输出方向
1.输出到别的 终端设备
2.输出到文件中
'' > 覆盖
'' >> 追加
| 管道符 天天见
将第一个命令的结果当作后一个命令的处理对象。
变量:值可以变化的
常量:值不可以变化
shell 不分数据类型
所有的 数类型 都是 字符串
要求 | 方式 |
---|---|
设置变量 | 变量名=变量值 两边没有空格 |
调用变量 | echo $变量名 |
删除变量 | unset 变量名 |
重新定义变量 | 变量名=变量值 |
追加变量值 | 变量名+=变量值 |
变量的类型
1.自定义变量:由用户自己定义,修改和使用
2.预定义变量 $? $$ $* $@ shell 程序中带的
3.环境变量env 看到所有环境的变量
4.只读变量 只可以读不可以改
5.位置变量 通过命令行给脚本程序传递参数
命名要求
-
区分大小写
-
不能使程序中的保留字和内置变量: 如: if,for,hostname 命令 a=
-
只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线“.”,和主机名相反。
-
不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH
-
大驼峰StudentFirstName
-
小驼峰studentFirstName
-
下划线student_name
特殊符号
${} 定义的变量名的范围 ${ } 一定不会错
"":变量在双引号中可以识别 弱引用
'':变量在单引号中不被识别 强应用
``:反撇号 代表引用命令执行的结果 效果等于 $()
变量追加值
格式
title=huoyingrenzhe
title+=qidong
变量名+=追加值
read -p
从键盘输入的内容变成变量
read -t :输入等待时间(单位默认为秒)
变量作用范围
方法:
-
格式1:export 变量名
-
格式2:export 变量名=变量值
可以使用pstree 查看shell的环境
输入bash进入子shell
ctrl+D组合exit 退出子shell
整数的运算
expr只能进行整数的运算
格式: expr 变量1 运算符 变量2 [运算符 变量3]
运算符:
加法 +
减法 -
乘法 \ *
除法 /
取余 (取模)%
环境变量
-
由系统提前创建,用来设置用户的工作环境
-
可以使用env查看环境变量
-
需要记住的常用环境变量
#env
#可以看到所有
$USER 表示用户名称
$HOME 表示用户的宿主目录
$LANG 表示语言和字符集
$PWD 表示当前所在工作目录
$PATH 表示可执行用户程序的默认路径
环境变量:
-
可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量
-
一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程
-
一般只在系统配置文件中使用,在脚本中较少使用
配置文件:
/etc/prodile 如果修改此文件会作用于所有用户
~/.bash_profile 用户独立的配置文件
只读变量
变量值不允许修改(重新赋值)的情况
无法使用 unset删除
最快方法重启
预定义(状态)变量
bash 帮你定义好了 拿来用就可以了,你不需要知道为什么,记住
-
$*:表示所有位置参数的内容看成一个整体返回 返回所有
-
$@:表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回 返回所有
-
$?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常
-
$#:表示命令行中位置参数的总个数
-
$0:表示当前执行的脚本或程序的名称 当前脚本的名字
-
$$:当前bash的进程id
-
$!: 后台任务最后一个id