设为首页 收藏本站
查看: 1476|回复: 0

[经验分享] linux中的(),(()),[],[[]],{}的作用

[复制链接]

尚未签到

发表于 2019-2-18 09:14:18 | 显示全部楼层 |阅读模式
  ()
  命令组.在括号中的命令列表, 将会作为一个子shell来运行.
  在括号中的变量,由于是在子shell中,所以对于脚本剩下的部分是不可用的. 父进程, 也就是脚本本身, 将不能够读取在子进程中创建的变量, 也就是在子shell中创建的变量.
  (cmd1;cmd2;cmd3)
  初始化数组.
  Array=(element1 element2 element3)
  $(...)
  相当于`...`命令,返回括号中命令执行的结果
  let命令
  (( ))
  (( ... ))结构可以用来计算并测试算术表达式的结果. 退出状态将会与[ ... ]结构完全相反!还可应用到c风格的for,while循环语句,(( )) 中,所有的变量(加不加$无所谓)都是数值。
  $((...))结构的表达式是C风格的表达式,其返回的结果是表达式值,其中变量引用可不用‘$’(当然也可以)
  for((...;...;...))
  do
  cmd
  done
  while ((...))
  do
  cmd
  done
  比较操作符
  <
  小于
  ((&quot;$a&quot; < &quot;$b&quot;))
   &quot;$b&quot;))
  >=
  大于等于
  ((&quot;$a&quot; >= &quot;$b&quot;))
  (( 0 ))  大于0为真,小于0为假
  echo &quot;Exit status of \&quot;(( 0 ))\&quot; is $?.&quot;         # 1
  (( 1 ))
  echo &quot;Exit status of \&quot;(( 1 ))\&quot; is $?.&quot;         # 0
  (( 5 > 4 ))                                      # 真
  echo &quot;Exit status of \&quot;(( 5 > 4 ))\&quot; is $?.&quot;     # 0
  (( 5 > 9 ))                                      # 假
  echo &quot;Exit status of \&quot;(( 5 > 9 ))\&quot; is $?.&quot;     # 1
  (( 5 - 5 ))                                      # 0
  echo &quot;Exit status of \&quot;(( 5 - 5 ))\&quot; is $?.&quot;     # 1
  (( 5 / 4 ))                                      # 除法也可以.
  echo &quot;Exit status of \&quot;(( 5 / 4 ))\&quot; is $?.&quot;     # 0
  (( 1 / 2 ))                                      # 除法的计算结果 < 1.
  echo &quot;Exit status of \&quot;(( 1 / 2 ))\&quot; is $?.&quot;     # 截取之后的结果为 0.
  # 1
  (( 1 / 0 )) 2>/dev/null                          # 除数为0, 非法计算.
  #
  echo &quot;Exit status of \&quot;(( 1 / 0 ))\&quot; is $?.&quot;     # 1
  for ((a=1; a  combined_file
  # 把file1, file2, file3连接在一起, 并且重定向到combined_file中.
  cp file22.{txt,backup}
  # 拷贝&quot;file22.txt&quot;到&quot;file22.backup&quot;中
  在大括号中, 不允许有空白, 除非这个空白被引用或转义.
  echo {file1,file2}\ :{\ A,&quot; B&quot;,' C'}
  file1 : A file1 : B file1 : C file2 : A file2 : B file2 : C
  代码块
  这个结构事实上创建了一个匿名函数(一个没有名字的函数). 然而, 与&quot;标准&quot;函数不同的是, 在其中声明的变量,对于脚本其他部分的代码来说还是可见的(除了用declare,typeset命令声明的变量)
  ()会开启一个新的子shell,{}不会开启一个新的子shell
  (())常用于算术运算比较,[[]]常用于字符串的比较.
  $()返回括号中命令执行的结果
  $(())返回的结果是括号中表达式值
  ${ }参数替换与扩展
  参数替换
  ${var}
  ${var}=$var
  ${var:-default}    ${var-default}
  如果var未set,那么就是用default.两者之间不同只有当var为空变量时,前者为default,后者为空.
  ${var:=default}    ${var=default}
  如果var未set,那么就设置default.两者之间不同只有当var为空变量时,前者设置为default,后者设置为空.
  ${var:+default}    ${var+default}
  如果var被set,就是用default.未set,就使用null字符串.两者之间不同只有当var为空变量时,前者为null字符串,后者为default.
  上面三种参数替换中,第二种使用后变量的值被改变.
  参数替换扩展
  ${#var}    ${#array}
  字符串长度或数组第一个元素的字符串长度
  例外:
  ${#*}、${#@}指位置参数的个数.
  ${#array

  •   },$[#array[@]}指数组元素的个数
      ${var#pattern}    ${var##pattern}
      从var开头删除最近或最远匹配pattern的子串.
      ${var%pattern}    ${var%%pattern}
      从var结尾删除最近或最远匹配pattern的子串.
      ${var:pos}
      变量var从位置pos开始扩展.
      ${var:pos:len}
      从位置pos开始,并扩展len长度个字符
      ${var/pattern/replacement}    ${var//pattern/replacement}
      使用replacement来替换var中的第一个或所有pattern的匹配.
      ${var/#pattern/replacement}
      如果var的前缀匹配到了pattern,那么就用replacement来替换pattern.
      ${var/%pattern/replacement}
      如果var的后缀匹配到了pattern,那么就用replacement来替换pattern.
      ${!varprefix*}    ${!varprefix@}
      前边所有声明过的,以varprefix为前缀的变量名.
      [[]]就是条件表达式,在bash中,字符串比较用  > < != == = 只是在[]中 < >需要转义;对于数值比较.用 -lt -le -eq -ge -gt 来比较,与[[]]中表达不太一样,在[ ] 中的 < > 需要用转义 \< \>,如果有多个表达式,在[[ ]] 中用 && || 来组合,而[] 中是用 -a -o 来组合
  在redhat  6 中测试 []中不需要转义亦可以使用,


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-673792-1-1.html 上篇帖子: LINUX的初探 下篇帖子: linux 安装源
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表