第一节:变量的替换
变量 | 说明 |
---|---|
${#变量} | 获取变量值的长度 |
${变量#匹配规则} | 从头开始匹配,最短删除 |
${变量##匹配规则} | 从头开始匹配,最长删除 |
${变量%匹配规则} | 从尾开始匹配,最短删除 |
${变量%%匹配规则} | 从尾开始匹配,最长删除 |
${变量/旧字符串/新字符串} | 替换变量内的旧字符串为新字符串,只替换第一个 |
${变量//旧字符串/新字符串} | 替换变量内的旧字符串为新字符串,全部替换 |
${变量:匹配规则:匹配规则} | 索引及切片 |
第二节:整数运算
1.expr (数值之间一定要有空格)#不能进行求方运算
[root@web /scripts/day02]# expr $a ^ $b
expr: syntax error
2.$(()) #不支持求方
[root@web /scripts/day02]# echo $(( $a ^ $b ))
30
3.$[]
[root@web /scripts/day02]# echo $[$a+$b]
30
4.let 计算次数 、自加 、自减
[root@web /scripts/day02]# let a++
[root@web /scripts/day02]# echo $a
11
[root@web /scripts/day02]# let a--
[root@web /scripts/day02]# echo $a
10
[root@web /scripts/day02]# let c=$a+$b
[root@web /scripts/day02]# echo $c
30
第三节:小数运算
1.bc #相当与计算器
[root@web /scripts/day02]# yum install -y bc
[root@web /scripts/day02]# bc #进入交互式
[root@web /scripts/day02]# echo $a + $b | bc
30
2.awk计算
[root@web /scripts/day02]# awk 'BEGIN{print $a + $b }' #不支持外部变量
0
[root@web /scripts/day02]# awk 'BEGIN{print 10 + 20 }'
30
[root@web /scripts/day02]# awk 'BEGIN{print 10 / 20 }'
0.5
[root@web /scripts/day02]# awk 'BEGIN{print 10 ^ 20 }'
100000000000000000000
[root@web /scripts/day02]# awk 'BEGIN{print 10 / 3 }'
3.33333
[root@web /scripts/day02]# awk 'BEGIN{printf "%.2f\n",10 / 3 }' #保留小数点后2位
3.33
[root@web /scripts/day02]# awk 'BEGIN{printf "%.1f\n",10 / 3 }' #保留小数点后1位
3.3
#awk内部变量
[root@web /scripts/day02]# awk -va=1 -vb=2 'BEGIN{print a + b }'
3
3.python
[root@web /scripts/day02]# python
echo "print $a + $b " |python
30
[root@web /scripts/day02]# echo "print $a ^ $b " |python
30
[root@web /scripts/day02]# echo "print $a / $b " |python
0
[root@web /scripts/day02]# echo "print $a.0 / $b " |python
0.5
[root@web /scripts/day02]# echo "print $a.0 / 10 " |python
1.0
[root@web /scripts/day02]# echo "print $a.0 / 3 " |python
3.33333333333
[root@web /scripts/day02]# echo "print 10 / 3 " |python
3
[root@web /scripts/day02]# echo "print 10.0 / 3 " |python
3.33333333333
第四节:数值比较
选项 | 说明 | 示例 |
---|---|---|
-eq | 等于则条件为真 | [ 1 -eq 10 ] |
-ne | 不等于则条件为真 | [ 1 -ne 10 ] |
-gt | 大于则条件为真 | [ 1 -gt 10 ] |
-lt | 小于则条件为真 | [ 1 -lt 10 ] |
-ge | 大于等于则条件为真 | [ 1 -ge 10 ] |
-le | 小于等于则条件为真 | [ 1 -le 10 ] |
第五节:字符串比对
1.字符串必须使用双引号
[ "name" = "name" ]
[ "name" != "name" ]
[root@web ~]# [ "$USER" = "root" ]
[root@web ~]# echo $USER
root
[root@web ~]# [ "$USER" = "root" ]
[root@web ~]# echo $?
0
[root@web ~]# [ "$USER" = "alex" ]
[root@web ~]# echo $?
1
[root@web ~]# [ "$USER" != "alex" ]
[root@web ~]# echo $?
0
2.-z判断变量值是否为空,为空则返回值0
[root@web ~]# name=""
[root@web ~]# [ -z $name ]
[root@web ~]# echo $?
0
[root@web ~]# [ ! -z $name ]
[root@web ~]# echo $?
1
[root@web ~]# name="alex"
[root@web ~]# [ -z $name ]
[root@web ~]# echo $?
1
[root@web ~]# [ -n $name ]
[root@web ~]# echo $?
0
-z 案例:
read -p "请输入名字" name1
[ -z $name1 ] && echo "请输入姓名否则不继续执行" && exit
read -p "请输入年龄" age1
echo $name1 $age1
第六节:正则比对
1.使用双中括号里面才能进行正则比对 [[ ]]
[root@web01 scripts]# [ "$USER" = "root" ]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ "$USER" =~ ^r ]]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ "$USER" =~ t$ ]]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ ! "$USER" =~ t$ ]]
[root@web01 scripts]# echo $?
1
案例:判读传参的参数是否为整数
方法1
[root@web01 scripts]# age=188
[root@web01 scripts]#
[root@web01 scripts]#
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# age=188q
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]] && echo $?
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]] || echo $?
1
[root@web01 scripts]# age=18.8
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]]
[root@web01 scripts]# echo $?
1
方法2
expr $1 + 0 >/dev/null 2>&1
[ $? -ne 0 ] && exit
第七节:多整数比对
1.使用-a /and 并且的意思,两边的条件同时成立,返回值则为0
[ 10 -eq 10 -a 100 -ne 100 ]
[root@web01 scripts]# [ 10 -eq 10 -a 100 -ne 100 ]
[root@web01 scripts]# echo $?
1
[root@web01 scripts]# [ 10 -eq 10 -a 100 -eq 100 ]
[root@web01 scripts]# echo $?
0
2.使用-o/or 或者的意思,两边的条件一个成立,返回值则为0
[root@web01 scripts]# [ 10 -eq 10 -o 100 -ne 100 ]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ 10 -eq 10 && 100 -ne 100 ]]
[root@web01 scripts]# [[ 10 -eq 10 -a 100 -ne 100 ]]
-bash: 条件表达式中有语法错误
-bash: `-a' 附近有语法错误
[root@web01 scripts]# [[ 10 -eq 10 && 100 -ne 100 ]]
[root@web01 scripts]# echo $?
1
[root@web01 scripts]# [[ 10 -eq 10 || 100 -ne 100 ]]
[root@web01 scripts]# echo $?
0
第八节:判断文件或目录
比较符 | 含义 | 示例 |
---|---|---|
-e | 如果文件或目录存在则为真 | [ -e file ] |
-s | 如果文件存在且至少有一个字符则为真 | [ -s file ] |
-d | 如果文件存在且为目录则为真 | [ -d file ] |
-f | 如果文件存在且为普通文件则为真 | [ -f file ] |
-r | 如果文件存在且可读则为真 | [ -r file ] |
-w | 如果文件存在且可写则为真 | [ -w file ] |
-x | 如果文件存在且可执行则为真 | [ -x file ] |