基础
正则表达式
Sed
Awk
Expect
shell基础
脚本,实现某种功能,且有执行权限的文件
遵揗语言格式、功能——变量函数数组流程控制
系统命令
脚本格式
#!/bin/bash 定义脚本shell
功能体————内容
执行脚本方法
./脚本名即可————前提该用户有执行权限
用户——>shell——>内核——>硬件
内核——资源分配和进程调度
当前支持的shell,没有的可以安装
系统默认为/bin/bash
可以使用 type 命令——是否为内置或外置命令
内置功能
更改histroy历史命令次数——默认为1000
该配置是全局——所有用户
[root@localhost ~]# vim /etc/profile
HISTSIZE=1000
每个用户家目录下有一个
该配置是root用户,同样,也可以设置别的用户
[root@localhost ~]# ls /root/.bash_*
/root/.bash_history /root/.bash_logout /root/.bash_profile
别名记录[root@localhost ~]# alias
全局生效
[root@localhost ~]# vim /etc/bashrc
用户生效
[root@localhost ~]# vim /root/.bashrc
管道
命令1 | 命令2 | 命令3|
重定向——修改数据输入或输出设备
标准输入/dev/stdin 0 键盘
标准输出/dev/stdout 1 显示器
标准错误输出/dev/stdout 2 显示器
重写向输出
> 覆盖
>> 追加
重写向输入
< 覆盖输入
<< 追加输入
重写向错误输出————也可以将错误信息记录到文件中
重写向正确+错误输出
变量——使用不变的字符串,保存变化的数据
编写时,把变化的数据用变量表示
变量的使用规则
变量名相同时,后赋值有效
变量名区分字母大小写
变量名命名时可以使用数字、字母、下划线,但不允许以数字开头
变量赋值是=两边不允许有空格
不指定变量类型时 默认都是字符类型
定义变量 变量名1=值
使用变量 $变量名1
输出变量的值 echo $变量名1
删除变量 unset $变量名1
查看已定义的变量 set |grep 变量名1
[root@localhost mnt]# a=this
[root@localhost mnt]# b=test
[root@localhost mnt]# echo $ais$b
test
[root@localhost mnt]# echo $a$b
thistest
[root@localhost mnt]# echo ${a}is$b
thisistest
[root@localhost mnt]# echo $a is $b
this is test
区别""和''
""变量的值会被值所取代
''不解释变量值——直接输出
[root@localhost mnt]# echo "$a-is-$b"
this-is-test
[root@localhost mnt]# echo '$a-is-$b'
$a-is-$b
系统命令的执行结果给变量赋值
[root@localhost mnt]# date ``
Wed Aug 24 22:48:25 CST 2016
[root@localhost mnt]# date +%d
24
[root@localhost mnt]# a=`date +%d`
[root@localhost mnt]# b=$(date +%d)
[root@localhost mnt]# echo $a $b
24 24
执行脚本时接收用户从键盘输入的数据——read 函数
结果
系统环境变量——系统启动时或系统服务启动时
加载配置文件定义 变量
系统环境变量名,通常都是大写字母定义
变量名和存储的值都是固定的
编写脚本时可以直接调用系统环境变量——通常不修改系统环境变量的值
$PATH——保存系统命令对就文件所在的目录
$USER——当前系统登录的用户
$PWD——当前的路径
$HOSTNAME——当前的主机名
全局变量:在当前shell和当前相有的子shell里使用
可以使用export 变量名=值————————export -n 变量名——————则取消变量
开机自动识别变量 export 变名=值写入到/etc/profile
局部变量:只能在当前shell下使用
终端变量周期
终端下定义变量只要不手动撤销、关闭终端,定义的变量就一直有效
脚本里定义变量,只在脚本执行过程中有效
预定义变量——/bin/bash——默认
变量名和值都是固定的,变量的值不可以修改,变量的值是根据当前运行环境赋值
在写脚本时可直接调用预定义变量
$0——保存当前终端的进程或当前运行脚本的脚本名
$?——上一条命令执行结果的返回状态
非0:错误
为0:正确
$$ 进程的PID号
$!——当前终端后台运行进程的PID号
[root@localhost ~]# find / -name "test" &
[1] 6608
[root@localhost ~]# echo $!
6608
位置变量——保存脚本或函数 对应位置变量的值
$1保存脚本或函数 第一个位置参数的值
$2保存脚本或函数 第二个位置参数的值
...
$9保存脚本或函数 第九个位置参数的值
${10}保存脚本或函数 第十个位置参数的值
......
$# ——保存脚本或 函数,位置变量 的总个数
$*——保存脚本或 函数,所有 位置变量 的值
自定义变量——根据脚本的需要定义的变量是自定义变量,遵揗变量的使用规则
可以man bash——/bin/bash帮助手册
命令行下的特殊符号
通配符——* ? {} []
&&
命令1 && 命令2
命令1执行成功,命令2才会执行
若命令1执行失败,命令2不会去执行
||
命令1 || 命令2
命令1执行失败,命令2才会执行
若命令1执行成功,命令2不会去执行
;
命令1 ; 命令2
先执行命令1,在执行命令2——————命令执行成功或失败,不影响后面命令的执行
编写脚本思路
明确脚本功能
实现功能时,会用到哪些系统命令
把变化的数据用变量表示
把脚本中反复执行的操作,使用流程控制实现
实验