一、shell的作用
Shell 是一个特殊的应用程序,它介于操作系统内核与用户之间,充当 了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执 行的操作传递给内核执行,并输出执行结果。 常见的 Shell 解释器程序有很多种,使用不同的 Shell 时,其内部指令、命令行提示符 等方面会存在一些区别。通过/etc/shells 文件可以了解当前系统所支持的 Shell 脚本种类。
1.1 linux中常见的shell
bash:基于gun的框架下发展的shell
csh:类似c语言的shell
tcsh:整合了csh提供了更多功能
sh:已经被bash替换
nologin:让用户无法登录
bash (/bin/bash)是目前大多数Linux 版本采用的默认shell
1.2 shell脚本用途
将简单的命令组合完成复杂的工作,自动化执行命令,提高工作效率
减少手工命令的重复输入,一定程度上避免人为错误
将软件或应用的安装及配置实现标准化
用于实现日常性的,重复性的运维工作,如:文件打包压缩备份,监控系统运行状态并实现告警等
1.3 shell的脚本概念
将命令按顺序一一列出,最后自动执行
执行需要权限,也可以直接使用路径
脚本其实不复杂,通用脚本环境改变后依然可以使用的脚本
构成
-
脚本申明(解释器):第一行开头“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行。#!/bin/bash为默认的解释器还有其他类型的解释器,#!/bin/python #!/bin/expect
-
注释信息:以#开头的语句表示为注释信息 # 注 释
-
可执行语句:比如echo命令用于输出“ ”之间的字符串
1.4 shell脚本执行逻辑及执行方式
脚本执行逻辑
-
顺序执行:程序按从上到下顺序执行
-
选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
-
循环执行:程序执行过程中需要重复执行多次某段语句
执行方式
-
指定路径去执行文件(需要有执行权限)
[root@localhost ~]# chmod +x /root/host.sh 加权限
指定相对路径./host.sh
指定绝对路径/root/host.sh
2. 直接使用解释器 (不需要权限)
3. source 和 . 执行 (不需要权限) 不推荐使用
1.5 脚本错误调试
命令错误,命令出错不会影响接下来的命令继续,用bash -n 无法检查出来 ,可以使用 bash -x 进行观察
语法错误,会影响接下来的命令继续可以用bash -n 检查错误,提示的出错行数不一定是准确的
逻辑错误,只能自己去筛查
检查脚本错误
- 检查语法错误:bash -n 脚本名称 (不在当前目录下加绝对路径)
- 检查逻辑错误:bash -x 脚本名称 (不在当前目录下加绝对路径)
1.6 set -e 一旦出错立即停止 set -u 当变量不存在立即停止
在 脚本的前面输入 set -e 一旦出错立即停止
set -e
cd /op
rm -rf ./*
在文档前面添加,可能会拖慢执行过程
二、重定向与管道符
2.1 重定向
类型 | 设备文件 | 文件描述编号 | 默认设备 |
---|---|---|---|
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
重定向的意思就是 ,不输出到默认设备上,输出到你指定的位置
类型 | 操作符 | 用途 |
---|---|---|
重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
重定向输出 | 1> | 将输出结果保存到指定的文件(覆盖原有内容) |
>> | 将输出结果追加到指定的文件尾部 | |
标准错误输出 | 2> | 将错误信息保存到指定的文件(覆盖原有内容) |
2>> | 标准错误输出结果追加到指定的文件尾部 | |
混合输出 | &>无论对错都可以重定向 | 将标准输出、标准错误的内容保存到同一个文件中 |
[root@localhost ~]#ls >/dev/pts/1
#打开两个终端,ls命令显示到终端1上 标准重定向省略了1>[root@localhost ~]#xxx >/dev/pts/1
##错误重定向
bash: xxx: 未找到命令...
[root@localhost ~]#xxx 2>/dev/pts/1
##会在另一边显示[root@localhost ~]#rm xxx.txt >/dev/pts/1
#提示信息也是错误
rm: 无法删除"xxx.txt": 没有那个文件或目录
[root@localhost ~]#rm xxx.txt 2>/dev/pts/1[root@localhost ~]#ls /data /error >all.log 2>&1
#既有错误也有正确 &符号表示分隔符
2.2 多行重定向
[root@localhost data]#wc -l <<EOF
> 123
> 123
> EOF
2将内容写入 文件
[root@localhost data]#cat >1.txt <<EOF
> 123
> 345
> 567
> EOF修改密码
[root@localhost data]#passwd zhangsan <<EOF
> 123123
> 123123
> EOF
更改用户 zhangsan 的密码 。
新的 密码:无效的密码: 密码少于 8 个字符
重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。
三、变量
3.1 常见 Shell 变量的类型包括
自定义变量:由用户自己定义,修改和使用
预定义变量:Bash中内置的一类变量 shell 不能修改 规定好的变量 放在那里让你使用
环境变量:由系统维护,用于设置工作环境 当前目录 当前主机名啊 $PATH
只读变量:只可以读取不可以更改 只能不能修改 常量
位置变量:通过命令行给脚本传递参数
3.2 特殊符号
shell变量特殊符号 | 双引号 | 弱引用 可以识别变量 |
单引号 | 强引用 不能识别变量 | |
{ } | 定义变量名的范围 | |
` 反撇 | 调用命令的执行结果与$( )功能限制 |
3.3 变量格式
定义变量:变量名=变量值 name=wang
调用变量:echo $变量名 echo $name
取消变量:unset unset wang
追加变量:export 变量名
3.4 变量追加值
格式:变量名+=追加值
3.5 变量作用范围
格式1:export 变量名
格式2:export 变量名=变量值
3.6 整数的运算 expr
格式: expr 变量1 运算符 变量2 [运算符 变量3]
需要非整数运算使用 bc
let var=算术表达式
let sum=1+2
sum=1+2sum=$[ ] 计算
echo $sum
3.7 随机数生成器变量
$RANDOM 取值范围:0-32767
echo $(expr $RANDOM % 33 + 1) 1-33
echo $(expr $RANDOM % 33 ) 0-32
#注意运算符附近都要有空格
3.8 计算机基本参数脚本
怎么将脚本拿到Windows: sz 文件名.sh