zoukankan      html  css  js  c++  java
  • shell 双中括号 双小括号

    shell的语法规则与python不同,这个笔记用来记下容易出现混淆出错的地方

    print和 printf的区别?

    shell中没有print 这个命令!

    只有printf这个命令,格式是:printf <format> [args], 格式中 是换行, 默认的printf是不换行的,      %s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。

    (base) [root@localhost Tana]# printf "just test %s" 'www
    '
    just test www
    

    双括号的特殊用法

    • (()) 增强括号的用法, 常用于算术运算比较. 双括号中的变量可以不使用$符号前缀, 只要括号中的表达式符合C语言运算规则, 支持多个表达式用逗号分开.

        比如可以直接使用for((i=0;i<5;i++)), 如果不使用双括号, 则为for i in `seq 0 4`或者for i in {0..4}.
        再如可以直接使用if (($i<5)), 如果不使用双括号, 则为if [ $i -lt 5 ].

    • [[]] 增强方括号用法, 常用于字符串的比较. 主要用于条件测试, 双括号中的表达式可以使用&&, ||, <, >等C语言语法.

        比如可以直接使用if [[ $a != 1 && $a != 2 ]], 如果不适用双括号, 则为if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ].   

    • Test和[]中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式。无论是字符串比较还是整数比较都不支持大于号小于号。如果实在想用,对于字符串比较可以使用转义形式,如果比较"ab"和"bc":[ ab < bc ],结果为真,也就是返回状态为0。[ ]中的逻辑与和逻辑或使用-a 和-o 表示。

    注意三点:

    1.  在[[ 中还是尽量带上 $ 符号不会出错
    2. shell 中尽量将 各种关键字 、表达式 ,运算符 和 变量参数 等用空格隔开,否则变量替换后,中间没有空格隔开就会成为一个连续的字符 ,(比如表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]
    3. [[ 或者  [ 与里面的表达式  要有 空格隔开 , (( 与里面的表达式 可以不用空格隔开

    补充说明:

               双中括号, 仅仅是: 单中括号的扩展. 两个方面的内容

              一是: 可以用于字符串的比较, (像1, 2, 10, 20)等, 只要不是在 let expr中, 都是字符串, 可以叫 "数字字符串", 数字字符串的比较 跟 "数值比较, 数学比较" 是一样的. 用于条件判断. 可以使用于 关系比较和逻辑运算.

    符号$后的括号

    1. ${a} 变量a的值, 在不引起歧义的情况下可以省略大括号.
    2. $(cmd) 命令替换, 结果为shell命令cmd的输出, 和`cmd`效果相同, 不过某些Shell版本不支持$()形式的命令替换, 如tcsh.
    3. $((exp)) 和`expr exp`效果相同, 计算数学表达式exp的数值, 其中exp只要符合C语言的运算规则即可, 甚至三目运算符和逻辑表达式都可以计算.

    何时用分号

    C 语言中, 每个语句后面都要加分号, 必须的! 但是, shell语句, 如果单独一行的话, 是可以/不必加分号的, 但是如果多个语句在一行, 则必须要加分号

     参考文档: 

  • 相关阅读:
    UIWebView 本地缓存
    基于x86 Android ndk应用移植指南(android ndk 生成libs/x86)
    安装android的IntelHaxm.exe时出错的问题
    使用javah生成.h文件, 出现无法访问android.app,Activity的错误的解决
    犯傻似得的开发
    关于在win8下开发c或者c++时,某些特殊情况
    android 图片加载过多崩溃
    辞职的三十八个理由
    android程序的代码混淆打包
    几条常见的数据库建表id增长sql语句
  • 原文地址:https://www.cnblogs.com/yan-2010/p/14281027.html
Copyright © 2011-2022 走看看