SHELL
$0
脚本自身名字
$?
返回上一条命令是否执行成功,0为执行成功,非0则为执行失败
$#
位置参数总数
$*
所有的位置参数被看做一个字符串
$@
每个位置参数被看做独立的字符串
$$
当前进程PID
$!
上一条运行后台进程的PID
单引号是告诉Shell忽略特殊字符,而双引号则解释特殊符号原有的意义
注释
Shell注释,只要在每行前面加个#号
Shell字符串处理之${}
${}还有一个重要的功能,就是文本处理,单行文本基本上可以满足你所有的需求
获取字符串长度
VAR='hello world!'
echo ${#VAR}
字符串切片
格式:
${parameter:offset}
${parameter:offset:length}
截取从offset个字符开始,向后length个字符
替换字符串
格式:${parameter/pattern/string}
将全部world字符串替换为WORLD
echo ${VAR//world/WORLD}
字符串截取
格式:
${parameter#word} # 删除匹配前缀
${parameter##word}
${parameter%word} # 删除匹配后缀
${parameter%%word}
# 去掉左边,最短匹配模式,##最长匹配模式。
% 去掉右边,最短匹配模式,%%最长匹配模式。
2.5 变量状态赋值 变量状态赋值 变量状态赋值
${VAR:-string} 如果VAR变量为空则返回string
${VAR:+string} 如果VAR变量不为空则返回string
${VAR:=string} 如果VAR变量为空则重新赋值VAR变量值为string
${VAR:?string} 如果VAR变量为空则将string输出到stderr
字符串颜色 字符串颜色
字符串输出颜色,有时候关键地方需要醒目,颜色是最好的方式:
字体颜色
字体背景颜色
显示方式
30:黑
31:红
32:绿
33:黄
34:蓝色
35:紫色
36:深绿
37:白色
40:黑
41:深红
42:绿
43:黄色
44:蓝色
45:紫色
46:深绿
47:白色
0:终端默认设置
1:高亮显示
4:下划线
5:闪烁
7:反白显示
8:隐藏
\033[1;31;40m # 1是显示方式,可选。31是字体颜色。40m是字体背景颜色。
\033[0m # 恢复终端默认颜色,即取消颜色设置。
条件表达式
[ expression ]
[[ expression ]]
test expression
整数比较符
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于或等于
-le 小于或等于
字符串比较符
== 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
-n 字符串长度不等于0为真
-z 字符串长度等于0为真
str 字符串存在为真
文件测试
-e 文件或目录存在未真
-f 文件存在为真
-d 目录存在未真
-r 有读权限为真
-w 有写权限为真
-x 有执行权限为真
-s 文件存在并且大小大于0为真
布尔运算符
! 非关系,条件结果取反
-a 和关系,在[]表达式中使用
-o 或关系,在[]表达式中使用
逻辑判断符
&& 逻辑和,在[[]]和(())表达式中或判断式是否为真时拥塞
|| 逻辑或,在[[]]和(())表达式中或判断表达式是否为真时使用
整数运算
+ 加法
- 减法
* 乘法
/ 除法
% 取余
运算表达式
$((1+1))
$[1+1]
其他运算工具(let/expr/bc)
let 赋值并运算,支持++、---
expr 乘法*需要加反斜杠转义\* expr 1 \* 2 运算符两边必须有空格
expr \( 1 + 2 \) \* 2 使用双括号时要转义
bc 计算器,支持浮点运算,平方
获取字符串长度: # expr length "string" 6
截取字符串: # expr substr "string" 4 6 ing
获取字符在字符串中出现的位置: # expr index "string" str 1
# expr index "string" i 4
获取字符串开始字符出现的长度: # expr match "string" s.* 6
# expr match "string" 3
shell括号的用途
( )
用途1:在运算中,先计算小括号里面的内容
用途2:数组
用途3:匹配分组
(( ))
用途1:表达式,不支持-eq这类的运算符。不支持-a和-o,支持<=、>=、<、>这类比较符和&&、||
用途2:C语言风格的for(())表达式
$( )
执行Shell命令,与反撇号等效
$(( ))
用途1:简单算数运算
用途2:支持三目运算符 $(( 表达式?数字:数字 ))
[ ]
条件表达式,里面不支持逻辑判断符
[[ ]]
条件表达式,里面不支持-a和-o,不支持<=和>=比较符,支持-eq、<、>这类比较符。支持=~模式匹配,也可以不用双引号也不会影响原意,比[]更加通用
$[ ]
简单算数运算
{ }
对逗号(,)和点点(...)起作用,比如touch {1,2}创建1和2文件,touch {1..3}创建1、2和3文件
${ }
用途1:引用变量
用途2:字符串处理
数组
array=(元素1 元素2 元素3)
array[下标]=元素
获取所有元素
#echo $[array[*]] #和@代表所有元素
获取元素下标
#echo ${![@]}
获取数组长度
echo ${#array[*]}
获取第一个元素
echo ${array[1]}
添加元素
array[3]=d
添加多个元素
array+=(e f g)
删除第一个元素
unset array[0]
删除数组
unset array
正则表达式
{n}或{n,} 匹配花括号前面字符至少n个字符
\< 边界符,匹配字符串开始
\< 边界符,匹配字符串开始
[:alnum:] 等效[a-zA-Z0-9]