shell脚本常用判断
shell变量
变量的赋值
注意: 赋值语句=
左右不能有空格
1 2 3 4 5
| name="test"
for i in `ls`
|
变量的使用
1 2 3
| echo $name echo ${name}
|
变量的高级用法
当变量没有声明时,直接使用赋予默认值,语法${var=Default}
当变量没有声明或者申明的变量为空字符串时,赋予默认值,语法${var:=Default}
1 2 3 4
| name=""
echo ${name:="test"}
|
数字运算
数字运算的两个变量必须是数字或者数字字符串,数字运算采用的语法是$((num1 + num2))
数字运算符
符号 |
解释 |
举例 |
+ |
加 |
$((num1 + num2)) |
- |
减 |
$((num1 - num2)) |
* |
乘 |
$((num1 * num2)) |
/ |
除 |
$((num1 / num2)) |
% |
求余 |
$((num1 % num2)) |
** |
乘方 |
$((num1 ** num2)) |
对于复杂运算,可以 通过括号来区分先后顺序
1 2
| $(((num1 + num2) * num3))
|
字符串
字符串的定义可以使用单引号,也可以使用双引号来定义
两者的区别在于
单引号字符串中引用的变量或者符合不会被解析或者转义
双引号字符串中引用则会解析或者转义
字符串定义
1 2 3 4 5 6 7 8 9 10 11 12
| #!/bin/bash
name="test string"
test_string1='this is a ${name}' echo ${test_string1}
test_string2="this is a ${name}" echo ${test_string2}
|
字符串连接
1 2 3 4
|
echo ${test_string1} ${test_string2}
|
字符串长度
截取字符串
普通截取
字符串截取下标索引从0开始
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| echo ${test_string1}
echo ${test_string1:2}
echo ${test_string1:2:5}
echo ${tset_string1:(-2)}
echo ${tset_string1:(-2):5}
|
字符串匹配截取
分两种
- 从开头开始匹配,左到右
语法:
echo ${var#正则表达式} 截取第一个匹配到表达式后面的字符串
echo ${var##正则表达式} 截取最后一个匹配到表达式后面的字符串
- 从结尾开始匹配,从右到左
echo ${var%正则表达式} 截取从右到左第一个匹配到表达式前面的字符串
echo ${var%%正则表达式} 截取从右到左最后一个匹配到表达式前面的字符串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| test_path=/usr/local/src/sa/local/sb/src
echo ${test_path#*/local}
echo ${test_path##*/local}
echo ${test_path%/local*}
echo ${test_path%%/local*}
|
匹配截取的一个高级用法,用来快速截取路径和文件名
1 2 3 4 5 6 7 8 9
| test_file=/var/www/html/index.html
echo ${test_file##*/}
echo ${test_file%/*}
|
字符串替换
字符串内置替换功能
语法:
${变量/查找正则表单/替换值} 一个”/“表示替换第一个,”//“表示替换所有
1 2 3 4 5 6 7 8 9 10 11
| test_path="/home/work/home/.vimrc"
echo ${test_path/.vimrc/.vimbashrc} 输出结果: /home/work/home/.vimbashrc
echo ${test_path/home/usr} 输出结果: /usr/work/home/.vimrc
echo ${test_path//home/usr} 输出结果: /usr/work/usr/.vimrc
|
逻辑判断
符号 |
解释 |
[] |
中括号一般是比较 |
() |
小括号一般是判断 |
字符串比较
符号 |
解释 |
= |
判断两个字符串是否相等 |
!= |
判断两个字符串不相等 |
-n |
判断字符串长度是否大于0 |
-z |
判断字符串长度是否为0 |
>,< |
字符串比较大小(使用时需要加上转义字符’\‘) |
数字比较
符号 |
解释 |
-eq |
等于 |
-ne |
不等于 |
-lt |
小于 |
-gt |
大于 |
-le |
小于或等于 |
-ge |
大于或等于 |
|
|
文件的判断
符号 |
解释 |
–b |
当file存在并且是块文件时返回真 |
-c |
当file存在并且是字符文件时返回真 |
-d |
当pathname存在并且是一个目录时返回真 |
-e |
当pathname指定的文件或目录存在时返回真 |
-f |
当file存在并且是正规文件时返回真 |
-g |
当由pathname指定的文件或目录存在并且设置了SGID位时返回为真 |
-h |
当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效 |
-k |
当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真 |
-p |
当file存在并且是命令管道时返回为真 |
-r |
当由pathname指定的文件或目录存在并且可读时返回为真 |
-s |
当file存在文件大小大于0时返回真 |
-u |
当由pathname指定的文件或目录存在并且设置了SUID位时返回真 |
-w |
当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。 |
-o |
当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真 |
复杂逻辑判断
符号 |
解释 |
-a |
双方都成立(and) |
-o |
单方成立(or) |
! |
非 |
while循环