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” or let “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}