shell程序:解释执行,过程式编程
计算机:二进制指令执行
#!/bin/bash
#!/usr/bin/env python
运程脚本:
chmod +x exp.sh ./exp.sh
bash exp.sh
&& a && b 只有第一个正确,第二个才会执行。 第一个失败,第二个也不会执行
|| a|| b 第个正确。第二个不会执行。第一个失败了才会执行第二个
grep:
grep 文本过滤egrep , fgreg
sed 文本编辑器
awk 文本报告生成器
grep -E 等于egrep
--color=auton
-v: 显示不能被匹配到行
-i:忽略大小写
-o:仅显示匹配到的字符串
-q: 静默模式,不输出任何信息
-A # :after ,后#行
-B # : before 前#行
-C # :前后各 # 行
基本正则表达式:
字符匹配
.:任意单个字符
[]:指定范围内的任意单个字符
[^]:指定范围外的任意单个字符
[:digit:] [:lower:] [:alpha:] [:alnum:] [:punct:] [:space:]
匹配次数:(默认工作在贪婪模式)
用在要指定次数的字符后面。用于指定前面的字符出现的次数
*:重复任意次
\?:匹配前面的字符0次或1次
\+:匹配前面的字符至少1
.*:任意长度,任意次数
\{n,m\}: 匹配到至少n次,至多m次
位置锚定:
^:行首锚定
$:行尾锚定
^PATTERN$: 用于模式匹配整行:
^$:匹配空行
\< 或 \b:词首锚定。用于单词模式的左侧
\> 或 \b:词尾锚定。用于单词模式的右侧
分组:
\( \): 将一个或多个捆绑在一起当作一个整体进行处理
Note:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中, \1,\2,\3......
\(ab\+\(xy\)*\)
\1:ab\+\(xy\)*
\2:xy
后向引用 :引用前面的分组括号中的模式所匹配字符
扩展的正则表达式
egrep:
a|b :a或者b 例如:babd
(a|b): ab
bash 基础特性
变量类型:
bash变量:
本地变量:生效范围当前shell进行
环境变量:当前shel及其子shell :declare -x name=cbw
局部变量:当前shell进程中某代码片断(通常指函数)
位置变量: $1, $2, 输入参数的
特殊变量:$?, $0, [email protected], $#
本地变量:
变量赋值:name="value"
变量引用 :直接使用 name =‘usrername‘ 变量引用 name=$username 命令引用 :name=‘command‘或者name = $(command)
变量引用 :${name} , $name
"":弱引用 变量名会替换为变量值
‘‘ :强引用 变量名不会替换为变量值
set :显示所有环境变量
销毁变量 unset name
环境变量:
export name =VALUE
declare -x name=VALUE
显示所有环境变量
env, printenv, export
销毁变量unset name
bash有许多内建的环境变量:
PATH: SHELL , UID。 HISTSIZE PWD OLD HISTFILE PS1
declare -r name :readonly ,常量了
位置变量
$1,$2
$0:命令本身。
$*:传递给脚本的所有参数
[email protected]:传递给脚本的所有参数
$#:传入参数的个数
shift #: 换
bash配置文件
全局配置:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
个人配置:
~/.bash_profile
~/.bashrc
profile类:交互式登录shell的配置(1.输入账号和密码登录2. 使用su - username)
bashrc类:非交互式登录shell的配置(1.su username 2.图形界面下打开的终端,执行脚本)
bash算术
let n=1+3 输出4
echo $[$n+$m] n=1,m=2 echo 3
echo $(($n+$m)) n=1,m=2 echo 3
expr $n + $m
$RANDOM 生成随机数 echo $[$RANDOM%60+1]
let c+=1 等于 let c++
条件测试:
判断某些场景是否满足。
test 表达式
test [表达式]
test [[ 关键字 ]]
数值测试:-gt -ge -lt -le -eq -ne
字符串测试: == > < != ~=(左侧的字符串是否可以被右边的模式匹配。匹配则为真) -z "string " 测试字符串是否为真,空则为真