(1)、Bash的基本功能
写在前面的话:
此随笔需要一定的Linux基础
shell是一门很简单的语言,它完成不了复杂的编程如写网站,写linux基本流程等等,它有些东西甚至不符合编程思想,但它对于我们运维人员来说,却是最简单且最实用的工具,它能减少我们的误判率,减轻我们的工作量。
人生最可悲的事莫过于,胸怀大志却碌碌无为。
莫等闲,白了少年头,空悲切。
Bash标准输入输出:
设备 |
设备文件名 | 文件描述 | 类型 |
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/stdout | 1 | 标准输出 |
显示器 | /dev/stderr | 2 | 标准错误输出 |
标准错误输出重定向:
错误命令 2>>file
#捕捉错误命令输出,并追加到文件,不在显示器上打印
[root@CAT ~]# lss 2>>file [root@CAT ~]# cat file -bash: lss: 未找到命令
实际使用:
命令 >> file1 2>>file2
#把正确命令输出信息放到file1,把错误输出信息放到file2
[root@CAT ~]# ls >> file1 2>>file2 [root@CAT ~]# lss >> file1 2>>file2 [root@CAT ~]# cat file1 file2 anaconda-ks.cfg file file1 file2 -bash: lss: 未找到命令
多命令执行符:
执行符 | 语法 | 作用 |
; | 命令1;命令2 | 多个命令顺序执行,之间无任何逻辑关系 |
&& | 命令1&&命令2 | 逻辑与,命令1正确执行($?=0),命令2才执行 |
|| | 命令1||命令2 | 逻辑非,命令1错误执行($?≠0),命令2才执行 |
[root@CAT ~]# ls && echo "yes" anaconda-ks.cfg file file1 file2 yes [root@CAT ~]# lss && echo "yes" -bash: lss: 未找到命令 [root@CAT ~]# ls || echo "no" anaconda-ks.cfg file file1 file2 [root@CAT ~]# lss || echo "no" -bash: lss: 未找到命令 no
用 && 和 || 可以进行简单的判断:
[root@CAT ~]# lss >/dev/null 2>/dev/null && echo "yes" || echo no no [root@CAT ~]# ls >/dev/null 2>/dev/null && echo "yes" || echo no yes
注意:这样判断时 && 一定在前,否则判断不符合逻辑,将无意义。
特殊字符:
特殊字符 | 名称 | 意义 |
' ' | 单引号 | 单引号中的所有特殊字符都不再有特殊含义 |
" " | 双引号 | 双引号中特殊字符无意义,但 "$"、"`"、"\"仍有特殊含义 |
` ` | 反引号 | 反引号中的内容为系统命令,在Bash中优先执行,但我们一般使用$()代替它,因为它是在太容易看错了 |
$() | $小括号 |
和反引号作用一致 |
# | 井号 | 注释 |
$ | dollar号 | 调用变量的值 |
\ | 转义符 | 跟在 \ 后的特殊字符将失去特殊意义,被转义为普通字符 |
通配符:
通配符 | 意义 |
? | 匹配任意一个字符 |
* | 匹配0个或多个字符,全匹配 |
[] | 匹配[]内的任意一个字符 eg:[abc] #匹配a或b或c |
[-] | 匹配[]内任意一个字符,- 是范围 eg:[0-9] #匹配一个是数字的字符 |
[^] | 逻辑非,反匹配,匹配一个不是[]内的字符 eg:[^0-9] #匹配一个不是数字的字符 |