赞
踩
根据经验汇总如下:
1、(()): 用于处理整数的算数、逻辑和关系运算,可用于不同数制转换;可用于if和while和for的条件语句中;【且里面用的运算符,应该是符合C语言语法的运算符】
2、[[]]: 常用于字符串的处理, 支持字符串判空,判不空,字符串比较,字符串模式匹配;
一、小括号
1、单小括号 ()
1)命令替换和传输:【这个功能可以同反引号作用一样『``』】
- TEST_CASE="FuncTestCase#Test_1"
- test_sence=$(echo $TEST_CASE | awk -F # '{print $1}')
- echo $test_sence
-
- 得到的结果为:FuncTestCase
2) 数组初始化
- array=(1, 2, 3, 4, 5)
- echo $array
-
- 得到的结果为: 1, 2, 3, 4, 5
2、双小括号 (())
1)算数运算
备注1:常用的 + - * / % , 均能使用生效;
备注2:使用时,变量前可以不使用$符号;
备注3:常用于 if语句的条件位置; for语句的条件位置等;
备注4:只能用于整数,不支持浮点数;
- case_1: 单纯的数学运算;
- a=1
- b=2
- c=$((a++))
- d=$(((a+b)*c/b))
- 运行结果:a=1; b=2; c=2; d=3
-
- case_2: if 流程控制; 【if 同双括号之间留有空格】
- if ((a<b)); then
- echo "111"
- else
- echo "222"
- 运行结果:111
-
- case_3: 循环流程控制:for
- for ((i=0; i<3; i++))
- do
- echo $i
- done
- 运行结果:0
- 1
- 2
-
- case_4: 循环流程控制: while
- while ((a<3))
- do
- echo $a
- ((a++))
- done
- 运行结果:1
- 2
2)C语言规则运算
备注1:运行格式为: $((exp));
备注2:所有符合C语音规则的运算符和表达式,均支持;
备注3:(()) 同let可以互换; 但,同时只能对整数进行运算;
- case_1: 逻辑运算 (&&、||)
- if ((a<b && c<b)); then
- echo "111"
- else
- echo "222"
- fi
- 运行结果为:2222
-
- if (($a)); then
- echo "a is not null"
- else
- echo "a is null"
- fi
- 运行结果:
- 当a="" | a= | a=" " 时, 运行结果均为: a is null
- 当a=1 时,运行结果为: a is not null
- 备注:a 不能为字符,只能是数字;
-
- case_2: 算数运算 (+ - * / %)
-
- a=1
- b=2
- c=$((a++))
- d=$(((a+b)*c/b))
- echo ((b++))
-
- case_3: 关系运算 (> < <= >= == !=)
- 备注1: 这里用的关系运算符,只能用C语言支持的;不能用shell的 -eq\-gt等;
- a=1
- b=2
- if ((a==b)); then
- echo "111"
- else
- echo "2222"
- fi
- 运行结果为: 2222
3)跨进制运算
- echo $((16#5b)) 运行结果为:十进制 91
- echo $((8#57)) 运行结果为:十进制 47
二、中括号
1、单中括号[]
【备注】 使用中括号时,可能会有不需要双引号也可以的情况,但是有写不带双引号就会报错, 这种情况下,建议处理串时都带上;
1)字符串比较
【备注1】:[] 支持的字符串比较运算符有: == 、!= 、-z、-n、$;
【备注2】:[] 应该左右均留空格,运算符左右也留空格,变量应该带有$符号;
- case_1: == (或者 =),检查两个字符串是否相等,相等返回true
- a="hello"
- b="hello_world"
- if [ "$a" == "$b" ]; then
- echo $a
- else
- echo $b
- fi
- 运行结果:hello_world
-
- case_2: != ,检测两个字符串是否不相等,不相等返回true
- a="hello"
- b="hello_world"
- if [ "$a" != "$b" ]; then
- echo $a
- else
- echo $b
- fi
- 运行结果: hello
-
- case_3: -z ,检查字符串长度是否为0, 为0返回true
- a="hello"
- if [ -z "$a" ]; then
- echo "111"
- else
- echo "222"
- fi
- 运算结果:the length of a is not 0
-
- case_4: -n ,检查字符串长度是否不为0, 不为0返回true [备注,这里的双引号是必须的]
- b=
- if [ -n "$b" ]; then
- echo "the length of b is not 0"
- else
- echo "the length of b is 0"
- fi
- 运算结果: the length of b is 0
-
- 或者[不想带双引号,也可以用如下运算]:
- b=
- if [ ! -z $b ]; then
- echo "the length of b is not 0"
- else
- echo "the length of b is 0"
- fi
- 运算结果: the length of b is 0
-
- case_5: $ ,检查字符串是否为空, 不为空返回true
- a=
- b=""
- if [ $a ]; then
- echo "a is not null"
- else
- echo "a is null"
- fi
-
- if [ $b ]; then
- echo "b is not null"
- else
- echo "b is null"
- fi
- 运行结果:a is null
- b is null
2)整数比较
【备注1】:[] 支持的整数比较的运算符,只能是:-eq(等于)、-ne(不等)、-gt(大于)、-lt(小于)、-ge(大于等于)、-le(小于等于);
- case_1: -eq ,检测两个数是否相等,相等为true;
- a=3
- b=4
- if [ $a -eq $b ]; then
- echo $a
- else
- echo $b
- fi
- 运行结果为:4
-
- case_2: -ne ,检测两个数是否不等, 不等为true;
- a=3
- b=4
- if [ $a -ne $b ]; then
- echo $a
- else
- echo $b
- fi
- 运行结果为:3
-
- case_3: -gt ,检测左边数是否大于右边,是为true;
- a=3
- b=4
- if [ $a -gt $b ]; then
- echo $a
- else
- echo $b
- fi
- 运行结果为:4
-
- case_4: -lt ,检测左边数是否小于右边,是为true;
- a=3
- b=4
- if [ $a -lt $b ]; then
- echo $a
- else
- echo $b
- fi
- 运行结果为:3
- ```
- 3)数组索引
- ```
- a=("今天" "天气" "怎么样")
- echo $a[1] 输出:今天
- echo $a[2] 输出:天气
- echo $a[3] 输出:怎么样
2、双中括号 [[]]
【备注】:[[ ]] 在处理字符串操作上,较[] 有所增强, 主要表现在: 1)支持逻辑运算符&& 和 || ,而不需要使用[] 中的-a 和-o; 2)支持字符串的模式匹配; 3)使用比较运算符时,无需再用转移符号; 4)使用变量,无需加双引号; 5) 使用时,变量前后应该都有空格;
1)字符串的判空 (-z)
- b=""
- if [[ -z $b ]]; then
- echo "b is null"
- else
- echo "b is not null"
- fi
-
- 运行结果为: b is null
2)字符串判不空 ( -n)
- b=""
- if [[ -n $b ]]; then
- echo "b is not null"
- else
- echo "b is null"
-
- 运行结果: b is null
-
- 【备注】在 [] 中判断不空,应该用 『! -z 』,如:
-
- if [ ! -z $b ]; then
- echo "the b is not null"
- else
- echo "the b is null"
- fi
- 运行结果: the b is null
【备注】 上述判断使用 -n 和 -z来进行判空和判不空,也可以直接使用变量来判断,比如:
- a=
- b="hello_world"
-
- if [[ $a && $b ]]; then
- echo "11111"
- else
- echo "22222"
- fi
- 运行结果: 22222
-
-
- a="hello"
- b="hello_world"
-
- if [[ $a && $b ]]; then
- echo "11111"
- else
- echo "22222"
- fi
- 运行结果为: 11111
3)字符串比较 (等于==,不等于!=,> 和 < )
- a="hello"
- b="hello_world"
- if [[ $a == $b ]]; then
- echo "111"
- else
- echo "2222"
- fi
- 运行结果:2222
-
- if [[ $a != $b ]]; then
- echo "111"
- else
- echo "2222"
- fi
- 运行结果:111
-
- 【备注】对于字符串使用比较运算符做比较,本质上是比较的每个字符的ASCII码值;
- a="hello"
- b="world"
- if [[ $a > $b ]]; then
- echo "1111"
- else
- echo "2222"
- fi
- 运行结果为:2222
4)逻辑运算 (&& 和 || )
- a="hello"
- b=
- if [[ $a && $b ]]; then
- echo "111"
- else
- echo "222"
- fi
- 运行结果为: 222
-
- if [[ $a || $b ]]; then
- echo "111"
- else
- echo "222"
- fi
- 运行结果为:111
5)字符串模式匹配 (=~ 和 ==)
- 【备注1】:== 的匹配 要求符合右边不能加双引号;即:不带双引号表示一种模式匹配; 带上双引号表示字符串比较;
- 【备注2】:如果是模式匹配,* 表示匹配任意个数的字符; ? 表示匹配任意一个字符;
- case_1:
-
- a="PerformMemoryCPUTestCase"
- if [[ $a == Perform* ]]; then
- echo "this is a perform test"
- else
- echo "other"
- fi
- 运行结果: this is a perform test
-
- case_2:
- a="PerformMemoryCPUTestCase"
- if [[ $a == "Perform*" ]]; then
- echo "this is a perform test"
- else
- echo "other"
- fi
- 运行结果: other
- 【备注1】: =~ 是shell的一种双目运算符,左侧为一个字符串或者字符串变量; 右侧为一个模式; 整个运算用于判断左侧的字符串是否匹配到右侧的模式,如果匹配,返回1,否则返回0;
-
- case_1: 字符串匹配
- a="PerformMemoryCPUTestCase"
- if [[ $a =~ Perform* ]]; then
- echo "this is a perorm test"
- else
- echo "other"
- fi
-
- case_2: 判断子串 [b是a的子串]
- a="hello_world_everyone"
- b="world"
- if [[ $a =~ $b ]]; then
- echo "111"
- else
- echo "222"
- fi
-
- case_3: 判断是否是ip地址的格式;
- a=192.29.229.29
- if [[ $a =~ ^([0-9]{1,3}.){3}[0-9]{1,3}$ ]]; then
- echo "111"
- else
- echo "222"
- fi
三、大括号
1)字符串提取和替换
- 提取:
- a="PerformMemoryCPUTestCase"
- echo ${a:4} 运行结果:ormMemoryCPUTestCase 【从第四个开始到结尾】
- echo ${a:4-7} 运行结果:ase 【从4-7=-3,即倒数第三个开始,到结尾】
- echo ${a:(-4)} 运行结果:Case 【从倒数第四个开始,到结尾】
- echo ${a:(-4)-(-7)} 运行结果:formMemoryCPUTestCase 【从 第三个开始,到结尾】
- echo ${a:(-4):5} 运行结果:Case 【从倒数第四个开始,输出5个字符】
- echo ${a:4:6} 运行结果: ormMem 【从第四个开始,输出6个字符】
-
- 替换: ${var/partten1/partten2} [将var中,第一次匹配到partten1模式的内容替换成partten2]
- ${var//partten1/partten2} [将var中,所有匹配到partten1模式的内容替换成partten2]
-
- a=/file_1/case_1
- echo ${a/1/2} 运行结果为:/file_2/case_1
- echo ${a/1/3} 运行结果为:/file_3/case_1
- echo ${a//[0-9]/4} 运行结果为:/file_4/case_4
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。