四、每天学习shell(四)shell指令中的各种括号的作用
根据经验汇总如下:
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
运行结果:hello_world
case_2: != ,检测两个字符串是否不相等,不相等返回true
a="hello"
b="hello_world"
if [ $a != $b ]; then
echo $a
else
echo $b
运行结果: hello
case_3: -z ,检查字符串长度是否为0, 为0返回true
a="hello"
b="hello_world"
if [ -z $a ]; then
echo "the length of a is 0"
else
echo "the length of a is not 0"
fi
运算结果:the length of a is not 0
case_4: -n ,检查字符串长度是否不为0, 不为0返回true
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 not 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)字符串的比较
2)逻辑运算符
三、大括号
1)字符串提取和替换
2)模式匹配