一、shell脚本
1、shell脚本概述
1>shell脚本的概念
- 将要执行的命令按顺序保存到一个文本文件
- 给文件一个可执行的权限
- 可以结合各种shell控制语句完成更复杂的操作
2>shell脚本应用场景
- 重复性的工作
- 交互性任务
- 批量事务处理
- 服务运行状态监控
- 定时任务执行
2、shell编程的作用
- 充当一个翻译官–命令解释器
- 介于系统内核与用户之间,负责解释命令行
3、shell编程规范
- 编写脚本代码:
使用vim 文本编辑器
每一条Linux命令,按顺序依次编写
例如:
[root@localhost opt]# vim test01.sh ##固定格式 .sh
#!/bin/bash
cd /boot/
pwd
ls -lh vml*
[root@localhost opt]# chmod +x test01.sh
[root@localhost opt]# ll
总用量 8
-rwxr-xr-x. 1 root root 89 7月 16 00:43 first.sh
drwxr-xr-x. 2 root root 6 10月 31 2018 rh
-rwxr-xr-x. 1 root root 38 7月 16 02:53 test01.sh
- 执行脚本文件方法
方法一:[root@localhost ~]# ./test01.sh
方法二:[root@localhost ~]# sh test01.sh
方法三:[root@localhost ~]# source test01.sh 或者 . test01.sh
注:方法一必须要有 x 执行的权限,方法二和三,执行后会改变当前的bash环境 - 完善脚本构成:
脚本声明
注释信息
可执行语句
[root@localhost opt]# vim test01.sh
#!/bin/bash
#cd /etc/
#pwd
#cat passwd
echo "前往boot目录"当前
cd /boot/
echo "当前的目录"
pwd
echo "查看passwd这个文件"
ls -lh vml*
4、重定向与管道
1> 交互式硬件设备
- 标准输入:从该设备接收用户输入的数据
- 标准输出:通过该设备向用户输出数据
- 标准错误:通过该设备报告执行出错的信息
类型 | 设备文件 | 文件描述编号 | 默认设备 |
---|
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
2> 重定向操作
类型 | 操作符 | 用途 |
---|
重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
重定向输出 | > | 将输出的结果保存到指定文件(覆盖原有内容) |
| >> | 将输出结果追加到指定文件尾部 |
标准错误输出 | 2> | 将错误信息保存到指定文件(覆盖原有内容) |
| 2>> | 将错误信息追加到指定文件 |
混合输出 | &> | 将标准输出,标准错误内容保存到同一个文件中 |
[root@localhost opt]# cat abc.txt 2> error.txt
[root@localhost opt]# vi error.txt
[root@localhost opt]# cat abc.txt
cat: abc.txt: 没有那个文件或目录
[root@localhost opt]# cat abc.txt > error.txt
cat: abc.txt: 没有那个文件或目录
[root@localhost opt]# ls
error.txt first.sh rh test01.sh
[root@localhost opt]# vim error.txt
3> 管道操作符号“ | ”
示例:grep "bash$" /etc/passwd | awk -F: '{print $1,$7}'
二、shell脚本变量
1>变量的作用
- 用来存放系统和用户需要使用的特定的参数(值)
变量名:使用固定的名称,由系统预设或用户定义
变量值:能够根据用户设置,系统环境的变化而变化
2>变量的类型
自定义变量:由用户自己定义,修改和使用
特殊变量:环境变量,只读变量,位置变量,预定义变量
1、自定义变量
- 定义一个新的变量:
变量的名以字母或下划线开头,区分大小写,建议大写
变量名=变量值 - 查看变量的值:
echo $变量名 - 赋值时:
双引号:允许通过
符
号
引
用
其
他
变
量
值
单
引
号
:
禁
止
引
用
其
他
变
量
值
,
符号引用其他变量值 单引号:禁止引用其他变量值,
符号引用其他变量值单引号:禁止引用其他变量值,视为普通字符
反撇号:· 命令替换,提取命令执行后的结果 - 从键盘中输入变量赋值
read [ -p ”提示信息” ] 变量名
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0330433361fe90029bc682406a72899b.png)
- 设置变量作用范围
格式1:export 变量名 (设置全局变量)
格式2:export 变量名=变量值 - 整数变量的运算
常用运算符:
+加法 -减法 * 乘法 / 除法 % 取余数
例如:expr $x + $y 将x与y变量的值相加
2、特殊变量
- 环境变量
由系统提前创建,用来设置用户的工作环境
配置文件:/etc/profile ~/.bash_profile - 常见环境变量
PWD PATH
USER SHELL HOME - 只读变量
readonly tom1 将tom1变量设为只读变量
只读变量不可以被删除和重新定义
删除变量: unset tom1 - 位置变量
表示为 $n ,n为1-9之间的数字
示例表示为:./myprog.sh $1 $2 .....
$# 命令行中位置变量的个数
$* 所有位置变量的内容
$? 上一条命令执行后返回的状态,当返回0时表示正常执行,非0值表示异常
$0 当前执行的进程/进程名
[root@localhost opt]# vim test2.sh
#!/bin/bash
bak=beifen-`date +%s`.tgz
tar zcf $bak $* &> /dev/null
echo "已执行$0脚本"
echo "共完成$#个对象的备份"
echo "具体内容包括:$*"
[root@localhost opt]# chmod +x test2.sh
[root@localhost opt]# ./test2.sh /etc/passwd /etc/shadow
已执行./test2.sh脚本
共完成2个对象的备份
具体内容包括:/etc/passwd /etc/shadow