Shell笔记
  Shell在用户和计算机硬件之间起翻译作用,Shell编程的目的是简化管理操作,它是一种弱类型语言,是用C语言编写的程序。开头必须是#!/bin/bash,其中#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序。
Bash变量
  变量名必须以字母下划线开头,中间只能有字母、下划线和数字组成,默认类型都是字符串型,Bash只支持一维数组。
  变量分类——用户自定义变量、环境变量、预定义变量和位置参数变量。
  用户自定义变量是局部变量,等号两边不能有空格,如果变量值有空格,需要加双引号,调用前需要加$。
  环境变量是全局变量,PATH(系统查找命令的路径), locale(当前语系查询)。
   预定义变量:$?最后一次执行的命令的返回状态,$$当前进程的进程号(PID),$!后台进行的最后一个进程的进程号(PID)
  位置参数变量:$n代表参数位置,$*看成整体, $@分别对待, $#返回变量个数。
Shell运算符
  Shell运算符分为算数运算符、关系运算符、布尔运算符、字符串运算符、文件测试运算符。
**算数运算符:**原生bash不支持简单的数学运算,但是可以通过其他命令来实现。
- awk和expr,expr最常用,weight=`expr 1+1`。
- let表示数学运算,
let “weight+1”orlet “weight=$weight+1”。 - (())——运算符,
((weight+1))or((weight=$weight+1))。 - $[ ]将中括号内的表达式作为数学运算先计算结果再输出,
Weight=$[$weight+1]。
**关系运算符:**只支持数字,不支持字符串,除非字符串的值是数字。
布尔运算符: !,-o,-a。
字符串运算符
文件测试运算符:用于检测Unix文件的各种属性。
参考:Shell编程Shell函数
  在Shell中的所有函数在使用前必须定义,这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。
[function] funname [()] { action; [return int;] }
注:$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。
Shell输入/输出重定向
  0是标准输入(STDIN),1是标准输出(STDOUT),2是标准错误输出(STDERR)。
> 将命令输出写入文件
>> 将命令追加到文件
&>> 将正确错误命令都可以追加到文件里
命令>>文件1 2>>文件2 正确命令写入文件1,错误写入文件2
Shell正则表达式
  正则表达式主要用于字符串的模式分割、匹配、查找及替换操作,正则是包含匹配,通配符用来匹配符合条件的文件名,通配符是完全匹配。
\* 匹配任意内容
? 匹配任意一个内容
[] 匹配中括号中的一个字符
\d 任意一个十进制数字
\s 任意一个空白字符
\w 任意一个数字、字母、下划线
^ 在[]外代表开头,在[]内代表取反
*={0,}, +={1,},?={0,1}