追风赶月莫停留,平芜尽处是春山。这篇文章主要讲述shell编程规范与变量相关的知识,希望能为你提供帮助。
shell 脚本概述Shell脚本的概念
【shell编程规范与变量】Shel1是一个面向字符串的编程语言,可以跟python之类的其他语言配合起来,比如某个复杂的功能使用一个python脚本来实现。
然后在shell中调用这个脚本实现较复杂的功能, 或者反过来,在Python脚本中调用外部的Shell脚本来提高自动化的效率,也是可以的。
脚本性语言)弱类型语言;
就是将命令按顺序一一列出, 最后自动执行
执行需要权限,也可以直接使用绝对路径
脚本其实不复杂,通用脚本环境改变后依然可以使用的脚本
Shell脚本应用场景
重复性操作
交互性任务(自动化运维)
批量事务处理
服务运行状态监控
定时任务执行
Shell的作用----命令解释器, “翻译官”
介于系统内核与用户之间,负责解释命令行:
接受用户输入的操作指令,并进行解释,将需要执行的操作传递给内核执行,并输出执行结果
linux中常见的shell
登录后默认使用的Shell程序,一般为/bin/bash
不同Shell的内部指令、运行环境等会有所区别
用户常用shell:
***检查一下/etc/shells这 个文件,里面就是Linux所包含的Shell。
最常用的就是bash、tcsh、 csh、sh、 nologin这些shell。
这些shell都是依据Linux发展者的不同所创造出的不同版本。
Linux发展者的不同所创造出的不同版本。
bash:基准于GNU的框架下发展出的Shell。
csh:语法有点类似于c语言的Shell。
tcsh:整合了csh,提供更多的功能。.
sh:已经被bash所替换。
nologin:奇怪的shell, 这个shel1可以让用户无法登录主机。
注: bash (/bin/bash)是目前大多数Linux 版本采用的默认Shell.
思考1:为什么系统上合法的Shell要写入/etc/shells这个文件呢?
答:这是因为系统某些服务运行过程中,会去检查用户能够使用的Shell,而这些shell的查询就是借由/etc/shells这个文件。
思考2:用户什么时候可以取得shell来工作?用户默认会取得哪一个shell?
当用户登录的时候,系统就会给我一个shell让我来用, 而这个登录取得的Shell就记录在/etc/passwd这个文件内。
shell脚本的作用
自动化运维
批量化重复操作可以编写脚本结合计划任务自动周期运行
减轻管理员工作量
提高处理文本文件的速度
避免配置出错
shell脚本的构成
1.脚本申明(解释器) :第一行开头“#!/bin/bash",
表示此行以下的代码语句是通过/bin/bash程序来解释执行。
#!/bin/bash为默认的解释器还有其他类型的解释器;
例如:#!/bin/python、#!/bin/expect
2.注释信息:以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行;
3.可执行语句:比如echo命令,用于输出“ ”之间的字符串
示例:
vim /root/first.sh
#!/bin/bash
# This is my first Shell-Script.
cd /boot
echo "当前的目录位于:"
pwd
echo "其中以 vml 开头的文件包括:"
ls -lh vml*
脚本执行逻辑及执行方式 脚本执行逻辑
顺序执行:程序按从上到下顺序执行
选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
循环执行:程序执行过程中需要重复执行多次某段语句
脚本执行方法
方法一:指定路径去执行文件(文件本身需要有执行权限)
[root@localhost ~]# chmod +x /root/frist.sh#加权限bash环境变量
指定相对路径 ./host.shfrist
指定绝对路径 /root/host.sh
方法二:指定Shell来解释脚本,不要求文件必须有x权限。
sh/bash 指定某个shell来解释脚本语句
例:sh yum.sh、bash yum.sh(使用指定shell执行脚本使用的是脚本中shell环境)
source 通过内部命令加载文件中的源代码也可以通过“.”来执行
例:Source yum.sh 或 . yum.sh
(source 或 .执行脚本使用的是当前用户所使用的脚本)
重定向与管道操作管道操作
管道操作作用:管道操作作为不同命令之间的协同工作提供了一种机制;
解释:位于管道符号“|”左侧的命令输出的结果,将作为右侧命令的输入对象,
且一条命令可以使用多个“|”。
例:cat /etc/passwd | grep "/bin/bash$" | awk -F: print $1,$7
重定向
交互式硬件设备
标准输入:从该设备接收用户输入的数据;
标准输出:通过该设备向用户输出数据;
标准错误输出:通过该设备报告执行出错信息;
类型 | 设备文件 | 文件描述编号 | 默认设备 |
标准输入 | /dev/stdin | 0 | 键盘
/dev/pts0 |
标准输出 | /dev/stdout | 1 | 显示器 /dev/pts1 |
标准错误输出 | /dev/stderr | 2 | 显示器 /dev/pts2 |
类型 | 操作符 | 用途 |
重定向输入 | <
| 从指定的文件读取数据,而不是从键盘输入 |
重定向输出 | >
| 将输出结果保存到指定的文件(覆盖原有内容) |
>
>
| 将输出结果追加到指定的文件尾部
(没有文件可以自动创建文件,不能创建目录) | |
标准错误输出 | 2>
| 将错误信息保存到指定的文件(覆盖原有内容) |
2>
>
|
将错误信息追加到指定的文件中 | |
混合 输出 | &
>
| 将标准输出、标准错误的内容保存到同一个文件中 |
>
...2>
&
1 | 将标准错误输出重定向到标准输出 |
示例1:
echo "123456" > pass.txt
passwd --stdin zhangsan < pass.txt
#从pass.txt文件中取mima,需要注意 SELinux 会影响此命令执行,
若执行失败可尝试关闭SELinux即setenforce 0
示例1:
ls -lh >推荐阅读
- #yyds干货盘点#dart系列之:浏览器中的舞者,用dart发送HTTP请求
- #私藏项目实操分享#SpringCloud技术专题「Gateway网关系列」微服务网关服务的Gateway功能配置指南分析
- Go语言学习查缺补漏ing Day8
- Prometheus监控运维实战十九( Thanos介绍)
- #yyds干货盘点# 使用background实现花式下划线
- #yyds干货盘点#方法调用(一看就懂,一问就懵())
- shell脚本规范与变量(内容补充修改后重发版)
- #yyds干货盘点#Git实现分支管理
- Spring认证中国教育管理中心-Apache Cassandra 的 Spring 数据