四、每天学习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)模式匹配

全部评论

相关推荐

像好涩一样好学:这公司我也拿过 基本明确周六加班 工资还凑活 另外下次镜头往上点儿
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务