Skip to content

Latest commit

 

History

History
64 lines (64 loc) · 4.03 KB

File metadata and controls

64 lines (64 loc) · 4.03 KB

Shell编程

入门

  1. 编写shell脚本,需要在文件头加上“#!/bin/bash”,指定执行的引擎
  2. shell脚本中,注释为#后内容,或“:<<!”、“!”之间的内容
  3. 一般shell脚本都会加上“.sh”,没有作用,但可以标识为shell脚本
  4. 完成脚本编写后需要加上可执行权限(推荐),然后以相对路径(./XXX.sh)或绝对路径(/xx/xx.sh)执行脚本,或者指定执行的引擎执行脚本(不推荐),比如“sh XXX.sh”

变量

  1. shell有多种变量:一般变量、静态变量、系统变量
  • 一般遍历:A=10,可以定义,也可以撤销:unset A
  • 静态变量:readonly B=12,不可以撤销:unset B会报错
  • 系统变量:系统内部的变量,可以直接使用:$PATH。使用set指令获取所有系统变量。可以使用export将用户自定义变量提升为系统变量,比如配置JAVA环境变量
  1. 变量名可以是字母+下划线+数字,但不能数字开头。等号两边不能有空格。一般变量名大写
  2. 使用A=`指令`或A=$(指令),可以将对于指令的返回值交给变量,注意使用的是反引号
  3. 设置环境变量
  • export 变量名=变量值 ,设置环境变量
  • source /etc/profile,刷新使变量生效,或者重启也可以
  • echo $变量名,使用变量
  1. 位置参数变量,从命令行中获得值
  • $0,$1,$2...:对应命令行位置的变量,$0是命令,$1,$2是之后位置的值
  • $*:除命令外所有参数,调用时加上引号,作为一个整体使用,不加引号,等同于$@
  • $@:除命令外所有参数,有分开,作为一个集合,不管加不加引号
  • $#:除命令外所有参数的数量
  1. 预定义变量
  • $$:本进程的PID
  • $!:后台运行的最后一个进程的PID
  • $?:最后一次指令是否成功,成功则为0,不成功为设定值
  • &:该行之前的指令后台执行

运算

  1. 一般的计算有三种方式
  • $((运算式)):注意有两层括号
  • $[运算式]:推荐使用
  • expr:`expr 2 + 3`。1、要用反引号括起来,2、参数与运算符之间有空格,3、乘号需要转义
  1. 判断
  • [ condition ]:内部为条件,且两边需要空格,当内部非空则返回true(0),否则为false(非0)
  • =:字符串是否相等
  • -lt:数字是否小于
  • -le:数字是否小于等于
  • -gt:数字是否大于
  • -ge:数字是否大于等于
  • -eq:数字是否等于
  • -ne:是否不等于
  • -r:文件是否有读权限
  • -w:文件是否有写权限
  • -x:文件是否有可执行权限
  • -e:文件是否存在
  • -f:是否存在且是一个常规文件,即不能是隐藏文件
  • -d:文件是否存在且为一个目录
  • !:取反
  1. 流程控制
  • if:使用“if”开头,“fi”结尾,等同if语句。“then”,为true时执行的语句。“elif”,等同于“elseif”,“else”,等同与java的else。
  • case:类似switch,以“case $变量名 in”开头,“esac”结尾,中间“ 值) 指令 ;;”作为case和break,“ *) 指令 ;;”作为default。case的值也可以是范围的条件,比如[6-9],注意没有空格。没有case穿透
  • for:有两种方式。1、“for i in $变量名”,等同于foreach。2、“for((i=0;i<=10;i++))”,等同于for循环,注意是双层括号。“do”、“done”,等同于“{”、“}”
  • while:“while [ condition ]”,“do”、“done”,等同于“{”、“}”。

读取控制台输入

  1. read:使用“read <选项> <参数>”。
  • 选项: -p 输出提示信息 -t 要求在多少秒内从控制台输入,否则就跳过
  • 参数: 用一个变量来接收输入值

函数

  1. 系统函数
  • basename <文件路径> <后缀名>:获取文件路径中的文件名,加上<后缀名>可以去除对应的后缀
  • dirname <文件路径>:获取文件路径中的目录的路径,并去除最后一个“/”
  1. 自定义函数
  • function 函数名(){函数体}:没有形参,“function”和“()”也可以没有
  • 调用自定义函数:函数名 传入的可能变量