shell基础笔记2-运算与比较操作

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

原文地址:https://www.cnblogs.com/guang2508/p/12709673.html