========BASH功能介绍
1》命令历史:可以通过history命令查看历史命令,所有的命令历史都有记录编号,命令历史能够记录的信息数量由/etc/profile文件中的HISTSIZE的值来决定,默认为 1000;
2》命令别名:可以把本来很长的指令简化缩写,为常用且复制的命令及选项创建别名可以大大提高日常工作效率;
alias mkip=`vim /etc/sysconfig/network-scripts/ifcfg-eth0`
unalias mkip
3》管道与重定向:标准输入的文件描述符为0,标准输出的文件描述符为1,错误输出的文件描述符为2;
相关命令:echo “pass” |passwd --stdin tom
mail -s test xx@gmail.com <list.txt 发送邮件,邮件内容来自文件
ls -l abc install.log 2>error.txt 仅将错误重定向,不影响正确输出
ls -l abc install.log >all 2>&1 标准输出与错误输出均导入至all
ls -l abc install.log &> all
ls -l abc install.log >> all 2>&1 标准输出与错误输出均追加至all
=========BASH使用技巧
1》重定向技巧:
相关命令: echo “pass” |passwd --stdin root >/dev/null
id user1 >>user 2>>error 查看用户,如果用户存在则输出至user,否则输出至error
2》命令序列使用技巧:在linux中,我们可以使用控制字符(;&& || &)来控制命令的执行方式,其中&控制字符使得命令开启一个子shell,并在后台执行;使用;控制 字符可以把多个命令组合,按顺序执行;使用&&控制字符也可以将多个命令组合,但仅当前一个命令执行成功后才会执行&&控制符后面的命 令;||控制字符的作用与&&刚好相反,仅当前一个命令执行失败才会执行控制符后面的命令;
相关命令: firefox &
ls /tmp; ls /root; ls /home
ls test.txt && cat test.txt
gedit || vim
id tom &> /dev/null && echo “hi ,tom” || echo “no such user”
3 》作用控制技巧:
相关命令: firefox &
jobs 查看后台进程,并给每个进程分配一个编号
fg 1 将后台进程再次调入前台执行
4》花括号使用技巧:
===================变量=====================
定义:变量是用来存储非固定值的载体,它具有一个值,以及零个或多个属性,变量名称为字母,下划线以及数字的组合,但首字母不可以为数字,我们可以通过 typeset命令来为变量设置属性;
相关命令:
NAME=tomcat
typeset -r NAME 添加readonly属性
declare INT_NUMBER 预先定义一个变量,但暂时不赋值给它
typeset -i INT_NUMBER 设置整数变量
read -p “please input a number:” P_NUMBER
set 查看当前系统中设置的所有变量和值
unset P_NUMBER 删除变量
******export 命令可以将一个普通变量转换为环境变量;
1》环境变量:BASH预设了很多环境变量,在实际工作中我们可以直接调用这些变量;
2》位置变量:位置变量使得在脚本中的命令可以调用运行脚本时不同位置的参数,参数一般使用空格分割,$0代表当前SHELL程序的文件名称,$1代表运行SHELL程 序的第一个参数,以此类推(范围为$1-$9)使用位置变量可以有助于我们查看很多相关信息,$#代表SHELL程序所有的参数的个数;$* $ @代表所有参 数的内容,不同的是前者将其看作一个整体,后者将所有参数分别作为个体看待;$$ 代表当前进程的ID号码;$?表示命令的执行反馈(0代表命令执行成 功,非0代表命令执行失败);
3》数组:一般可以使用两种方式创建数组变量,第一种使用name[subscript]=value的语法格式定义的变量自动创建索引数组,subscript 必须是大于或等于0的整数或 表达式;第二种使用name=(value1 value 2 valuen)的语法格式创建,使用declare -a name 可以预定义一个空数组变量;我们最后使用${name[subscript]}来 调用数组,如果subscript 是 @或者 *符号,则将调用所有的数组成员,使用${#name[sbuscript]}可以返回该数组成员的长度,如果subscript是@或*,则返回 数组中成员的个数;
4》算术运算与测试:使用$((expression)) 可以实现整数级的算术运算;
$((x+y)) 加法运算
$((x-y)) 减法运算
$((x/y)) 除法运算,结果仅保留整数位
$((x*y)) 乘法运算
$((x%y)) 取余运算
$((x++)) 自加运算
$((x--)) 自减运算
$((x**y)) 幂运算,x 的y次方
*****BASH内置命令test可实现测试工作;
-d FILE 文件是否存在,且为目录
-e FILE 文件是否存在
-f File 文件是否存在,且为普通文件
-w FILE 文件是否存在,且可写
-r FILE 文件是否存在,且可读
-x FILE 文件是否存在,且可执行
-h FILE 文件是否为链接文件
-s FILE 文件是否存在且非空
-n STRING 字符串长度非0
-z STRING 字符串长度为0
STRING1 != STRING 2 字符串不相等
STRING 1 = STRING2 字符串相等
INTER1 -eq INTER2 前者等于后者
INTER1 -gt INTER2 前者大于后者
INTER1 -ge INTER2 前者大于等于后者
INTER1 -le INTER2 前者小于后者
INTER1 -lt INTER2 前者小于等于后者
INTER1 -ne INTER2 前者不等于后者
*****test -d /etc/ && echo “Y” || echo “N”
====================SHELL引号
1》反斜线:反斜线可以将紧随其后的单个字符视为字面意义上的字符,列如*会把*作为字母意义上的普通字符;另外,如果在命令的末尾使用回车后,可以将回车的 命令提交功能屏蔽,从而将回车认为是换行继续输入命令,实现命令的多行输入功 能;
2》单引号:单引号可以将它中间的所有任意字符还原为字面意义,实现屏蔽SHELL元字符的功能,注意:不可以在两个单引号中间单独插入一个单引号,单引号必须 成对出现;
3》双引号:双引号类似于单引号,但其不会屏蔽 `,,$这三个SHELL元字符的含义,如果需要屏蔽这些字符含义,必须前置一个符号,其他字符的功能将被屏蔽 (包括单引号),也就是说,两个双引号之间的单引号不必成对出现;
4》反引号:SHELL使用反引号进行命令替换,命令替换使SHELL可以将命令字符替换为命令执行结果的输出内容,同样的功能也可以使用$()来实现;
===============正则表达式
注意:正则表达式中有些匹配字符与SHELL中的通配字符符号一样,但含义不一样;
1》基本正则表达式:
. 匹配任意单个字符
* 匹配前一个字符出现零次或多次
.* 匹配任意多个任意字符
[] 匹配集合中的任意单个字符,括号中为一个集合
[x-y] 匹配连续的字串范围
^ 匹配字串的开头
$ 匹配字串的结尾
[^] 匹配否定,对括号中的集合取反
匹配转义后的字串
{n,m} 匹配前一个字符重复n 到 m次
{n,} 匹配前一个字符至少重复n次
(n) 匹配前一个字符重复n次
() 将( 与)之间 的内容存储在保留空间,最大存储9个
通过1至9调用保留空间的内容
************基本正则表达式案例
1》查找包含root的行:
2》 查找:与0:之间包含任意两个字符的字串,并显示该行(--color代表以颜色加亮显示匹配的内容:):
3》查出包含至少一个0的行(第一个0必须出现,第二个0可以出现0次或多次):
4》查找包含oot 或 ost的行:
5》查找包含数字0-9的行:
6》查找包含字母f-g的行:
7》查找以root 开头或者以 bash结尾的行:
8》查找sbin/后面不跟n的行:
9》查找数字0出现1次,2次的行:
10》查找包含两个root的行(注意:grep在使用()过滤时,匹配条件必须使用引号):
11》查找包含以root: 开头,以:root结尾的字串行:
12》过滤文件的空白行,空滤文件的非空白行:
==========扩展正则表达式
1》扩展正则表达式及含义:
{n,m} 等同于基本正则表达式的{n,m}
+ 匹配前一个字符出现一次或者多次
? 匹配前一个字符出现零次或一次
| 匹配逻辑或者,即匹配前或后的字串
0 匹配正则集合
2》扩展正则表达式案例:
1)查找数字0出现一次和两次的行:
egrep --color ‘0{1,2}’ test
2)查找包含至少一个0 的行:
egrep --color ‘0+’ test
3)查找包含以root 开头或者以 bash结尾的行:
=================POSIX规范:
[:alpha:] 字母字符
[:digit:] 数字字符
[:alnum:] 字母与数字字符
[:punct:] 标点符号
[:space:] 任何产生空白的字符
[:blank:] 空格与TAB键字符
[:lower:] 小写字符
[:upper:] 大写字符
=========案例========