1 命令行相关

查看进程情况: ps -ef
过滤文本行: grep xxx, 反向过滤文本行: grep -v xxx

2 shell脚本相关

2.1 单引号’’, 双引号””, 反引号``

首先 bash 中的反引号 `` 与另外两种的功能不同是命令替换。而单引号 ‘’ 和双引号 “” 都是用来解决变量赋值有空格的情况,比如在 bash 中这样定义 str=this is String,这样就会报错,为了避免出错就得使用单引号或双引号;但是两者有一定的区别:

  • 单引号剥夺了所有字符的特殊含义被括起来的内容变成了单纯的字符;
  • 双引号则会让变量替换( ${} )和命令替换( ``$() )有特殊含义;
    • echo ‘$n’ # 会直接打印出 $n
    • echo “$n” # 会打印出变量 n 的值

      2.2 命令替换 `` 和 $()

      在bash中,$()`` 的作用基本上是等价的都是命令替换。先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。只不过并不是所有的类 unix 系统都支持 $() 这种方式,但反引号是肯定支持的 ``bash [root@localhost ~]> echo today is $(date "+%Y-%m-%d") today is 2017-11-07 [root@localhost ~]> echo today isdate “+%Y-%m-%d”` today is 2017-11-07

过多使用``有可能得不到预期效果

[root@localhost ~]> echo Linux echo Shellecho today is `date “+%Y-%m-%d”``` Linux Shellecho today is 2017-11-07

``和$()混合使用比较清晰

[root@localhost ~]> echo Linux echo Shell $(echo today is $(date "+%Y-%m-%d")) Linux Shell today is 2017-11-07

只使用$()也能产生正确结果

[root@localhost ~]> echo Linux $(echo Shell $(echo today is $(date “+%Y-%m-%d”))) Linux Shell today is 2017-11-07

  1. <a name="FlCtX"></a>
  2. ### 2.3 变量替换
  3. 一般情况下,**$var** 与 **${var}** 是没有区别的,但是用${ }会比较精确的界定变量名称的范围,而只使用 **$** 会把后面紧接的字母整体作为变量名;
  4. ```shell
  5. [root@localhost ~]> A=Linux
  6. [root@localhost ~]> echo $AB #表示变量AB
  7. [root@localhost ~]> echo ${A}B #表示变量A后连接着B
  8. LinuxB

Shell 和其他编程语言一样,支持多种运算符,包括:

  • 算数运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,其中 expr 最常用它是一款表达式计算工具,使用它能完成表达式的求值操作。

  1. echo "3 9"|awk '{print ($1+3)*$2}' # awk 方式
  2. echo `expr \( 3 + 3 \) \* 9` # expr 方式

两点注意:

  • 表达式和运算符或括号之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
  • 完整的表达式要被 包含,注意这个字符不是常用的单引号,在 Esc 键下边。
  • 条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]