. 匹配任意字符(汉字也行)
* 匹配任意0,1,2次数
(wang)* 单词重复任意0,1,2次数
+ 重复一次以上
x{n} 精确匹配n次,
x{n,} 最少匹配n次
x{n,m} 匹配n到m次
x{,m}最多匹配m次
?匹配0,1次(非贪婪模式)
^ 脱字符,匹配行首
$ 匹配行尾
\< , \b 以..首个字母或数字开始匹配(词首)
\> , \b 以..为结尾匹配(词尾)
[^,] 除了...
[:alpha:] 匹配字母
[:alnum:] 匹配字母和数字
a|b xy :a或b ,xy
(a|b)xy: axy或bxy
(expr1) (expr2) \1(第一次匹配得到的规则) \2(第二次匹配得到的规则) vim中 :%s /xyz/&er/g 在vim中将xyz逐行替换成xyzer vim中几种常见的模式 命令模式: 以vi打开一个文件就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用上下左右按键来移动光标,你可以使用**删除字符或删除整行**来处理文件内容, 也可以使用复制、粘贴来处理你的文件数据。 输入模式: 在命令模式中可以进行删除、复制、粘贴等的操作,但是却无法编辑文件的内容,只有当到你按下【i, I, o, O, a, A, r, R】等任何一个字母之后才会进入输入模式。这时候屏幕的左下方会出现【INSERT或 REPLACE】的字样,此时才可以进行编辑。而如果要回到命令模式时, 则必须要按下【Esc】即可退出编辑模式。 底线命令行模式: 输入【 : / ? 】三个中的任何一个,就可以将光标移动到最底下那一行。在这个模式中, 可以提供查找、读取、存盘、替换字符、离开vi、显示行号等的动作则是在此模式中完成的!
ifconfig ens33 |grep -o
-o : 表示的只输出符合re规则的字符串
egrep=grep -E 用于显示文件中符合条件的字符串
匹配ip地址及网卡?
192.168.30.100
255.255.255.0
192.168.30.123
解析:其中有1,2,3位的数字
[0-9] 0-9
[1-9][0-9] 10-99
1[0-9][0-9] 100-199
2[0-4][0-9] 200-249
25[0-5] 250-255
>ifconfig ens33|grep -o"(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|[2[0-4][0-9]|25[0-5])\.{3}([0-9]|[1-9][0-9]|1[0-9][0-9]|[2[0-4][0-9]|25[0-5])\>)"
其中[0-9]|[1-9][0-9]可以简化成[1-9]?[0-9]
1.按照绝对路径执行(执行前脚本必须要有执行权限 chmod +x xx.sh)
./xx.sh
2.bash 或 cat xx.sh|bash
3.将脚本放在 PATH环境变量对应的任意路径下直接运行
注意 :
echo $PATH
mv xx.sh /root/bin
xx.sh
第一次执行就按照PYTH中的路径查找,一但找到就把路径hash到内存中了
>hash(查看)
若 mv /root/bin/hello.sh /usr/local/bin
hello.sh找不到脚本文件了
hash -d hello.sh(脚本的名字)
hello.sh 再次执行就又hash到内存中了
cmd : command命令提示符
补充:Hash
Hash,一般翻译做“散列”
也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。
简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
#! /bin/bash
set nu
set ignorecase#(忽略大小写)
set cursorline#(设置光标行对齐)
set autoindent#(设置自动行对齐)
autocmd BufnewFile *.sh exec ":call SetTitle()"
func SetTitle()
if &filetype=="sh"
call setline(1,"#!/bin/bash")
call setline(2,"#***************")
call setline(3,"Author : xzw")
call setline(4,"#Date: " .strftime("%y-%m-%d"))
call setline(5,"#***************")
endif
endfunc
补充:
1.&
& 放在启动参数后面表示设置此进程为后台进程
默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个'&'实现这个目的。然后可以用ctrl + c键结束进程
ctrl + c :linux中结束进程
ctrl + z :linux中将进程挂起
2.
1.命令错误
hostnam :命令继续向下执行
2.语法错误
syntax error :默认不会继续执行下去
脚本调试
bash -n file.sh 来检测脚本中的语法错误
bash -x file.sh 跟踪脚本中执行的命令
注意:
echo $HOSTNAME
显示的+表示执行的命令,
echo `hostname`
++表示的是嵌套的命令(两层)
引用变量加$与不加$
#能区分字符串的命令则不用加,
echo 默认打印的是字符串所以要加 $
系统自带的环境变量
PATH
HOME
UID
PWD
PS1
1.变量赋值
name="Mage"
等号两边无空格
name="wang"
注意:
重新赋值变量,会重新开辟一个空间存放wang,不会立即删除Mage,删除也会消耗资源,标记等待回收,下次内容会覆盖
2.命令赋值
name=`hostname`
3.变量内存放多行内容
name=`cat /etc/fstab`
echo "$name"
加双引号可以保留原来多行内容的格式
4.变量引用变量
name1="wang"
name2=name1
name1="li"
#>echo $name1
>li
#>echo $name2
>wang
name1重新赋值会重新开辟空间存放赋值内容,name2的原指向不变
shell的变量类型不需要声明,不检查变量存放的数据类型
例如:
i=100
默认存放的是字符串
定义变量需要指定类型
Java c c#
不需要指定数据的类型
python php bash
bash 不支持浮点数,只支持小数
命名规则
StudentName : 大驼峰命名法
studentFirstName :小驼峰命名法(第一个单词的首字母不大写)
echo $$查看当前的进程编号
echo $PPID查看父进程的进程编号
pstree -p :查看进程树
bash 另开一个进程
exit 退出进程
父子进程间的变量不会相互影响,不可相互传递
export name="haha"
或者
declare -x name='haha'
全局变量中,子进程可以使用,修改父进程的变量,但是不会影响父进程的变量
HOSTNAME 主机名称
SHLVL shell的嵌套深度
PATH
1.储存各种工具,命令的路径
2.当使用工具及命令(运行脚本)的时候,系统会去PATH中查找对应的工具及命令
3.若不想用绝对路径执行脚本,可以将脚本添加到PATH中(hash查看)
SHELL
USER 当前的用户
UID 用户的id
HOME 用户的家目录
PWD 用户的当前目录
LANG 当前使用的语言
MALL
HISTSIZE
ls /bin/ /dev/ /etc/
ls可以同时显示多个目录
$_ 上一个命令的最后一个参数
># echo $_
># /etc
unset + 变量名
export 查看目前环境变量
env 查看系统自带的环境变量
set 显示最全的变量(全局、局部变量)
declare -x
主机名 : hostname
Ipv4地址 : ifconfig ens33 | grep ""
操作系统版本: cat /etc/centos-release
cat /etc/redhead
内核版本 uname -r
CPU型号 lscpu
内存大小 cat /proc/meminfo
硬盘大小 lsblk
查看分区 df -h
tr - translate or delete characters 主要用于转换和删除字符
1.去除重复的字符
tr -s "[a-z]"
tr -s " " 去除重复的空格
tr -s "[\n]"
2.替换大小写
tr "[a-z]" "[A-Z]"
3.删除
tr -d "[0-9][:]" 删除所有数字及空格
通过扫描文本的每一行,匹配符合规则的数据
-F 指定分隔符
$0 整行
$n 第n列
NF 当前行的列数
$NF 最后一列
{} 命令代码块,包含一条或多条命令,多条命令用 ; 隔开
-d 指定字段分割符,默认为tab
-f 显示指定字段的内容
># echo "/home/lxy/hhhhh-a.bbb.cc.d" |awk -F/ '{print $NF}'| cut -d'.' -f2
># bbb
cut -d"" -f2
-a
尽可能将源文件状态、权限等资料都照原装予以复制,并且是递归copy;
-r
表示递归copy,若source中含有目录名,则将目录下之档案亦皆依序拷贝至目的地;
-f
若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制;
-v
复制的时候显示详细信息
支持控制字符
># echo -e "\e[1;31m abed \e[0m"
这条命令会把 abcd 按照红色输出。
\e[1 是标准格式,代表颜色输出开始,
; 注意封号后面是颜色
\e[0m 代表颜色输出结束,
31m 定义字体颜色是红色。
echo 命令能够识别的颜色如下:
30m=黑色,31m=红色,32m=绿色,33m=黄色,34m=蓝色,35m=洋红, 36m=青色,37m=白色。
用于设置用户在创建文件时的默认权限
root用户默认umask是0022 ,普通用户默认的是0002
drwxr-xr-x
755
默认情况下,
目录,用户所能拥有的最大权限是777;
文件,用户所能拥有的最大权限是目录的最大权限去掉执行权限,即666。666-022若是得到奇数,再加一
目录:777-022=755
文件:666-022=644
777减去设置的umask的值得到的是当前设置的文件的权限
更改权限
umask 026
1.umask命令只能临时修改umask值,系统重启之后umask将还原成默认值。
2.如果要永久修改umask值,需要修改/etc/profile文件或是修改/etc/bashrc文件
3.例如要将默认umask值设置为027,那么可以在文件中增加一行“umask 027”。
---------------------------------------------------------------------------------
-rw-rw-r–这一字符串标识文件权限。
这个字符串有10位,可以分为4段来解读。
注:r可读,w可写,x可执行。
第一段(第1位)表示是目录还是文件,-表示是文件,d表示是目录;
第二段(第2-4位,共3个字符串)表示文件所属用户对它的权限;
第三段(第5-7位,共3个字符串)表示文件所属用户组用户对它的权限;
第四段(第8-10位,共3个字符串)表示其他用户对它的权限;
注:
我们用3位8进制来表示文件的权限,
4,2,1
r用4标识,2^2读
w用2标识,2^1写
x用1标识,2^0可执行
---------------------------------------------------------------------------------
(umask 026;mkdir xzw_test_2)
1.用于一次性的任务,运行的时候会开启子进程,不影响父进程,不影响当前的进程的环境变量,运行完退出。
2.多个指令可以用;连接
>>>x=1;echo "pid=$$";(echo "subpid=$$";x=2;echo "subx2=$x");echo x=$x
>pid=2887
>subpid=2887
>ubx2=2
>x=1
注意:
小括号和子shell还不太一样,是开启子进程但是()的进程和当前的进程id一样
bash使用说明书
查询()介绍
:/\(list\)