1、let整数运算
let 变量名 = 变量1 运算符 变量2
let++
注意let命令只能执行整数的相关运算,运算结果也只能保存整数(除法取整,其余的有小数就报错)
2、expr整数运算
算术运算只能进行整数运算(除法取整,其余的有小数就报错),还可以进行字符串的操作
expr expression1 操作符 expression2
操作符 * 前必须加‘’用于转义,并且操作符和两个expression之间必须有空格(和let不同)
expr作为外部命令要用反引号引起来
例:res=`expr $1 * 4 +$3`
3、bc浮点数运算
管道的应用:variable=`echo "OPTION;OPERATIONS" | bc`,其中scale作为bc一个最重要的选项,用来指定输出小数的位数
例:n=`echo "scale=3;13/2" | bc`
echo $n
结果:6.500
4、字符串运算
1、输出字符串长度
法一:echo ${#str1}:输出变量$str1的长度
法二:expr length $str1:输出变量$str1的长度
2、取子串的操作
法一:expr substr $string $position $length 注意位置编号从1开始
str=“abcde123”
expr substr $str 3 3
结果:cde
法二:echo ${string:$pos:$length} 注意位置编号从0开始
str="abcde123"
echo ${str:2:3}
结果:cde
3、字符串连接操作
$str3="${str1}$str2"
echo $str3
4、字符串替换操作
str="you and you and zhangsan"
echo ${str/you/YOU} #只替换一次
结果:YOU and you and zhangsan
echo ${str//you /YOU} #全部替换
YOU and YOU and zhangsan
test命令语法:test value1 -option value2
如果比较成功则$?为0,否则返回非0,此处用于判断操作
5、整数比较
大于 | -gt |
小于 | -lt |
大于等于 | -ge |
小于等于 | -le |
等于 | -eq |
不等于 | -ne |
1 #!/bin/sh 2 #test整数比较方法 3 a=100 4 b=200 5 c=100 6 d=300 7 #输出a,b,c,d的值 8 echo -e "a:$a b:$b c:$c d:$d" 9 #大于比较 10 test $b -gt $a 11 if [$? -eq 0] 12 then 13 echo "b>a" 14 else 15 echo "b<=a" 16 fi 17 #大于等于比较 18 test $b -ge $a 19 if [$? -eq 0] 20 then 21 echo "b>=a" 22 else 23 echo "b<a" 24 fi 25 #不等于比较 26 test $d -ne 400 27 if [$? -eq 0] 28 then 29 echo "d!=400" 30 else 31 echo "d=400" 32 fi
6、字符串比较
测试空字符串 | -z |
测试字符串的长度为非零 | -n |
等于某一个字符串 | = |
不等于某一个字符串 | != |
test -z $str1 $str1字符串为空,则返回值$?为0
test -n $str2 $str2长度不为0,则返回值$?为0
test $str3 = $str4 字符串相等则返回值$?为0
test $str5 != $str6 字符串不相等则返回值$?为0
7、逻辑比较
逻辑与 | -a |
逻辑或 | -o |
逻辑非 | ! |
test $# -eq 1 -a $1 -eq 100 输入的参数个数为1且第一个参数为100。$#:变量个数,$1:第一个参数
test $# -ge 1 -o $1 -eq 100 输入的参数个数大于等于1或第一个参数为100
8、文件比较
文件存在并且是一个常规文件 | -f |
文件不为空 | -s |
文件可读 | -r |
文件可写(修改) | -w |
文件可运行 | -x |
文件是一个目录名 | -d |
文件是一个符号链接 | -h |
文件名引用一个字符设备 | -c |
文件名引用一个块文件 | -b |
套接口文件 | -s |
符号链接文件 | -l |
常规文件:-rwxrwxrwx. 1 root root 395 Apr 9 22:26 a.txt
目录文件:drwxr-xr-x. 2 root root 4096 Apr 9 23:27 ss
字符设备或块设备文件:crw--w----
块设备文件:brw-rw----
套接口文件:srwxrwxrwx
符号链接文件:lrwxrwxrwx
test -f $filename 文件存在且为常规文件则返回值$?为0