脚本
who?
一个文件,批量按序依次执行文件中的命令
脚本语言:shell、python、vb、bat
一、shell(命令解释器)
充当翻译角色,将用户操作转换为内核识别操作
脚本的重要性:用于完成自动化批量操作,减少管理员工作量
脚本的组成
1)声明解释器(#!/bin/bash)
2)批量化操作
3)注释(#)
4)变量、判断等
例:
mkdir /sh
vim /sh/test1.sh
#!/bin/bash //声明以下命令采用/bin/bash解释器执行
cd /tmp/
mkdir ./a
touch ./a/aa
ls -r /tmp
执行:
source /sh/test1.sh 或 . /sh/test1.sh //执行脚本文件(脚本文件不需具有执行权限)
sh -x /sh/test1.sh //执行脚本文件(脚本文件不需具有执行权限,一般用于排错)
chmod +x /sh/test1.sh && /sh/test1.sh //执行脚本文件(以相对或绝对路径执行,脚本文件必须具有执行权限)
注:脚本文件一般后缀为.sh
输入
通过输入设备将将数据交由硬件处理
输入设备:鼠标、键盘、数位板、话筒、摄像头
默认设备:键盘、鼠标
文件描述编号:0
设备文件:/dev/stdin
passwd root 0</dev/stdin //设置root的密码从默认输入设备读取(0</dev/stdin可忽略,系统自动填写)
passwd root </dev/stdin //效果同上
passwd root //效果同上
重定向输入:更改输入设备为文件
vim /sh/a
123
passwd root 0</sh/a //设置root的密码从/sh/a文件中读取
passwd root </sh/a //效果同上
正确输出
将硬件处理结果通过输出设备显示
输出设备:显示器、打印机、音响、耳机
默认设备:显示器
文件描述编号:1
设备文件:/dev/stdout
ls -l 1>/dev/stdout //将ls -l命令的正确输出结果输出到默认输出设备(1>/dev/stdout可忽略,系统自动填写)
ls -l >/dev/stdout //效果同上
ls -l //效果同上
重定向正确输出:更改输出设备为文件
ls -l 1>/sh/hehe //将ls -l命令的正确输出结果输出到/sh/hehe文件中
ls -l >/sh/hehe //效果同上
错误输出
文件描述编号:2
设备文件:/dev/stderr
ls -l /eee 2>/dev/stderr //将ls -l /eee命令的错误输出结果输出到默认输出设备(2>/dev/stderr可忽略,系统自动填写)
ls -l /eee>/dev/stderr //效果同上
ls -l /eee //效果同上
重定向错误输出:更改输出设备为文件
ls -l /eee 2>/sh/err //将ls -l /eee命令的错误输出结果输出到/sh/err文件中
混合输出
文件描述编号:&
ls -l /tmp /a &>/dev/stdout //将ls -l /tmp /a命令的正确及错误结果输出到默认输出设备(&>/dev/stdout可忽略,系统自动填写)
ls -l /tmp /a //效果同上
重定向混合输出
ls -l /tmp /a &>/sh/huohuo //将ls -l /tmp /a命令的正确及错误将结果输出到/sh/huohuo文件中
ls -l /tmp /a 1>/sh/suss.log 2>/sh/error.log //将ls -l /tmp /a命令的正常结果保存到/sh/suss.log,将错误结果保存到/sh/error.log
注:如需将输出结果重定向,并不想保存到文件中时,可重定向到/dev/null(linux下的特殊文件,相同于windows的回收站,但内容自动清空)
二、变量
1)优点:简化用户操作、灵活
2)分类:
a.自定义变量:用户自行定义,可添加删除、使用
b.环境变量:有系统维护,设置环境变量值;如path(env可查看当前系统所有环境变量)
c.位置变量:通过命令行给脚本传递参数
d.预定义变量:shell中内置变量,只能使用,不可更改
自定义变量:
格式:变量名=变量值
引用:$变量名
案例:
vim /sh/hehe.sh
#!/bin/bash
r_dir=/boot/
ls -l $r_dir
注:变量名不能以数字、特殊符号取名;建议使用大写字母
'':单引号,强引用,不会加载变量的值
" ":双引号,加载变量的值
例如:
a=1
b=2
echo '$a$b' //屏幕输出$a$b
echo "$a$b" //屏幕输出12
unset 变量名 //取消变量的定义(一般用于系统的变量定义)
脚本流程
1)命令行测试
2)编写脚本文件
3)添加必要的变量
4)测试
5)使用
读取用户输入:
read [ -p "提示信息" ] 变量名
vim bak.sh
read -p "请输入需备份位置:" file
tar -zcvf /tmp/hehe.tar.gz $file
source bak.sh
变量的运算:
expr 变量1 运算符 变量2 ...
注:expr不支持小数点
运算符:
+:加法
-:减法
*:\转义,乘法
/:除法
%:求余运算、求模运算
bc命令:
bc //进入运算环境
scale=8 //指定保留的小数点位数
1*2-(2/2)
quit //退出
环境变量:
由系统创建并维护的变量
env //查看当前系统所有的环境变量
path //指明软件或命令的所有路径
path=/tmp/aa:$path //新增命令搜索路径
vim /etc/profile
最后增加:path=/tmp/aa:$path //将新增路径设置为永久生效
位置变量
$0 - $9
$0:命令名或脚本名
$1 - $9:脚本参数的位置,第一个参数、第九个参数
预定义变量
$*:所有参数的值
$#:参数的数量
$?:判断上条命令执行结果,0为正确,非0执行错误
案例一:
backup.sh
tar -zcvf /tmp/111.tar.gz $* &>/dev/null
echo "已执行$0脚本"
echo "共完成$#个对象的备份"
echo "具体内容为$*"
案例二:
vim server.sh
read -p "输入需要的操作:stop | restart | start" aa
read -p "输出需要的服务:" bb
/etc/init.d/$bb $aa