- 一.shell脚本基础
- 1 shell的作用
- 2.什么是shell脚本?及构成
- 3.脚本执行逻辑及执行方式脚本执行逻辑
- 4.脚本错误
- 5.脚本错误常见的有三种区别
- 6.执行脚本方式
- 1)./脚本
- 2).bash 脚本
- 3). . 脚本
- 4).做软链接
- 5).sourse 脚本
- 6).sh 脚本
- 7.脚本应用场景
- 二.重定向
- 1.交互式硬件设备
- 2.E0F
- 2.重定向操作
- 三.变量
- 1.变量基础
- 2.命名要求
- 3.变量追加值
- 4.read -p
- 5.整数的运算
- 6.只读变量
- 7.位置变量
- 8.预定义变量
- 总结
Linux系统中的Shell是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器"的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。
常见的Shell解释器程序有很多种,使用不同的Shell时,其内部指令、命令行提示符等方面会存在一些区别。通过/etc/shells文件可以了解当前系统所支持的Shell脚本种类。
就是将命令按顺序——列出,最后自动执行·
执行需要权限,也可以直接使用绝对
脚本其实不复杂,通用脚本环境改变后依然可以使用的脚本构成
1.脚本申明(解释器)︰第一行开头"#! /bin/bash",表示此行以下的代码语句是通过/bin/bash程序来解释执行。#! /bin/bash为默认的解释器还有其他类型的解释器,#!/bin/python #! /bin/expect
2.注释信息:以#开头的语句表示为注释信息T
1.顺序执行:程序按从上到下顺序执行
2.选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
3.循环执行:程序执行过程中需要重复执行多次某段语句
1.命令错误
命令出错不会影响接下来的命令继续
2.语法错误
会英雄接下来的命令继续
3.逻辑错误
1.语法错误,会导致后续的命令不继续执行,可以用bash -n检查错误,提示的出错行数不—定是准确的
2.命令错误,默认后续的命令还会继续执行,用bash -n无法检查出来,可以使用bash -x进行观察
3.逻辑错误:只能使用bash -x进行
例子:写一个yum仓库
[root@localhost ~]# chmod 777 xx.sh #必须加权限,否则无法运行 [root@localhost ~]# ./xx.sh 主机名:localhost.localdomain IP地址:192.168.133.50 cpu信息: Intel(R) Core(TM) i5-10200H CPU @ 2.40GHz 版本信息:CentOS Linux release 7.4.1708 (Core) 内核信息:3.10.0-693.el7.x86_64 内存信息:3.7G 硬盘信息: 107.4 GB2).bash 脚本
[root@localhost ~]# bash xx.sh 主机名:localhost.localdomain IP地址:192.168.133.50 cpu信息: Intel(R) Core(TM) i5-10200H CPU @ 2.40GHz 版本信息:CentOS Linux release 7.4.1708 (Core) 内核信息:3.10.0-693.el7.x86_64 内存信息:3.7G 硬盘信息: 107.4 GB3). . 脚本
[root@localhost ~]# . xx.sh 主机名:localhost.localdomain IP地址:192.168.133.50 cpu信息: Intel(R) Core(TM) i5-10200H CPU @ 2.40GHz 版本信息:CentOS Linux release 7.4.1708 (Core) 内核信息:3.10.0-693.el7.x86_64 内存信息:3.7G 硬盘信息: 107.4 GB4).做软链接 5).sourse 脚本
[root@localhost ~]# source xx.sh 主机名:localhost.localdomain IP地址:192.168.133.50 cpu信息: Intel(R) Core(TM) i5-10200H CPU @ 2.40GHz 版本信息:CentOS Linux release 7.4.1708 (Core) 内核信息:3.10.0-693.el7.x86_64 内存信息:3.7G 硬盘信息: 107.4 GB6).sh 脚本
[root@localhost ~]# sh xx.sh 主机名:localhost.localdomain IP地址:192.168.133.50 cpu信息: Intel(R) Core(TM) i5-10200H CPU @ 2.40GHz 版本信息:CentOS Linux release 7.4.1708 (Core) 内核信息:3.10.0-693.el7.x86_64 内存信息:3.7G 硬盘信息: 107.4 GB7.脚本应用场景
重复性操作
交互性任务
批量事务处理
服务运行状态监控
定时任务执行
标准输入:从该设备结束用户输入的数据
标准输出:通过该设备向用户输出数据
标准错误:通过该设备报告只能怪出错信息
| 类型 | 设备文件 | 文件描述编号 | 默认设备 |
|---|---|---|---|
| 标准输入 | /dev/stdin | 0 | 键盘 |
| 标准输出 | /dev/stdout | 1 | 显示器 |
| 标准错误输出 | /dev/stdout | 2 | 显示器 |
[root@localhost ~]# echo "123123" |passwd --stdin 用户名 改密2.E0F
Shell中通常将E0F与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到E0F为止,再返回到主调Shell。
可以把E0F替换成其他东西,意思是把内容当作标准输入传给程序。
回顾一下< <的用法。当shell看到< <的时候,它就会知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到shell又看到该分界符(位于单独的一行)。这个分界符可以是你所定义的任何字符串。
cat和eof结合使用具有追加功能 使用Cat和EOF多行输入 cat >> /root/test.txt <2.重定向操作
类型 操作符 用途 重定向输入 < 从指定的文件读取数据,而不是从键盘输入 重定向输出 > 将输出结果保存到指定的文件(覆盖原有内容) >> 将输出结果追加到指定的文件尾部 标准错误输出 2> 将错误信息保存到指定的文件(覆盖原有内容) 2>> 将错误信息追加到指定的文件中 混合输出 &> 将标准输出、标准错误的内容保存到同一个文件中 [root@centos7 ~]#ls /data /xxx > /data/all. 1og 2>&1 [root@centos7 ~]#ls /data /xxx 2> /data/all.log 1>&2 [root@centos7 ~]#ls /data /xxx &> /data/all.log [root@centos7 ~]#ls /data /xxx >& /data/all.1og 错误 [root@centos7 ~]#ls /data /xxx 2>&1 > /data/all. 1og三.变量保存将来会变化的数据,即使数据变化,直接调用变量即可,各种 Shell环境中都使用到了"变量""的概念。Shell 变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化。通过使用变量,Shell程序能够提供更加灵活的功能,适应性更强。
1.变量基础常见Shell 变量的类型包括:
2.命名要求
1自定义变量:由用户自己定义,修改和使用
2环境变量:由系统维护,用于设置工作环境
3只读变量:只可以读取不可以更改
4位置变量:通过命令行给脚本传递参数
5预定义变量:Bash中内置的一类变量,不能修改区分大小写
不能使程序中的保留字和内置变量:如:if, for,hostname
只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线"-”,和主机名相反不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH
大驼峰StudentFirstName
小驼峰studentFirstName
下划线:student_name[root@localhost ~]# zy=ky15 [root@localhost ~]# class=201 [root@localhost ~]# echo $zy$class ky15201 [root@localhost ~]# echo $zy:$class ky15:201 [root@localhost ~]# echo ${zy}2021 ky152021 [root@localhost ~]# echo "$zy"2021 ky152021{}分隔变量的范围
“ ”识别变量
’ ‘会把变量识别成字符串
1.赋值时使用双引号("")可以直接调用变量
⒉赋值时使用单引号(’ ‘) 只 会 被 认 为 是 字 符 只会被认为是字符 只会被认为是字符不会调用变量
3.赋值时使用(反撇在tab上面)命令替换,提取命令执行后的输出结果$)用法相同
4{ }可以分隔变量值单引号:强引用,六亲不认,变量和命令都不识别,都当成了普通的字符串,“最傻”
双引号:弱引用,不能识别命令,可以识别变量,“半傻不精”
反向单引号:里面的内容必须是能执行的命令并且有输出信息,变量和命令都识别,并且会将反向单引号的内容当成命令进行执行后,再交给调用反向单引号的命令继续,"最聪明
引用变量 命 令 执 行 结 果 {} 命令执行结果 命令执行结果()
运算$[] 或者 $(())$() 或 ``引用命令执行的结果
3.变量追加值
( ( ) ) 或 (()) 或 (())或[]进行运算
使用 或 " {}或" 或"变量名" 划定变量名的起止范围变量名+=追加值
[root@localhost ~]# zy=ky15 [root@localhost ~]# zy+=2021 [root@localhost ~]# echo $zy ky1520214.read -p从键盘输入的内容变成变量
[root@localhost ~]# read -p "请输入一个价格:" num 请输入一个价格:1235.整数的运算expr只能进行整数的运算
格式: expr变量1运算符变量2[运算符变量3]
运算符:
加法+
减法-
乘法*
除法/
取余(取模)%[root@localhost ~]# expr 1 + 1 2 [root@localhost ~]# expr 5 - 1 4 [root@localhost ~]# expr 20 / 4 5 [root@localhost ~]# expr 3 * 4 12 [root@localhost ~]# expr 17 % 4 1[root@localhost ~]# i=100;j=100;let j=i++;echo "i=$j j=$i" i=100 j=101 先赋值再加减 [root@localhost ~]# i=100;j=100;let j=++i;echo "i=$j j=$i" i=101 j=101 先运算再赋值6.只读变量格式
readonly 变量名[root@localhost ~]# zy=hello [root@localhost ~]# readonly zy [root@localhost ~]# zy+=yudf -bash: zy: readonly variable这种情况下只能重启才能失效
7.位置变量格式
脚本[root@test1 ~]#vim l.sh #!/bin/bash echo "$1" 位置1 echo "$2" 位置2 echo "${10}” 位置10 echo "$10" 位置1和0相当于$1+08.预定义变量$* 将所有项当成一个值 $@ 所有项各自成项, $0 脚本自身 $# 命令行位置参数的个数 $? 表示之前一条命令或者脚本执行后的返回状态,0正确,非0则不正确总结Shell的作用与应用场景
ShelI脚本的编写规范与执行方法重定向与管道的作用与使用方法
自定义变量赋值时单引号、双引号、反撇号的使用方法
数值变量的常用运算符:+、-、l*、I、%
环境变量、只读变量、位智变雀、制定义变量的用途



