shell脚本

225 阅读2分钟

注释和编译器选择

  1. 单个#表示注释
  2. <<EOF EOF表示多行注释
  3. #! /bin/bash用于选定bin下的bash来进行脚本解释,否则默认使用shell

变量定义(注意一点,等号赋值两边都不能加空格)

  1. 加单引号和不加单引号都是表示普通赋值
  2. ""中一般可以用于解析变量值
ret=100
echo "ret的值=$ret"

一个好习惯,给所有的变量加上{},界定变量名范围

变量类型定义

typeset -需要赋值的类型 需要设置类型的变量名

typedef -i data

几个常用的关键字

  1. echo 用于打印 echo $PATH用于打印环境变量PATH的值
  2. env 用于打印所有环境变量
  3. unset 用于清除变量值
  4. read 变量名 用于读取键盘输入存到后面跟随的变量名中
  5. readonly 只读变量

预设变量(由shell直接提供的无需定义的变量)

  1. $# 传给脚本的参数数量
  2. $* 传给shell脚本的参数的内容
  3. $1,$2,$3,... 运行脚本时传递给他的参数,空格隔开
  4. $? 命令执行后返回的状态,一般在一个命令执行后,可以用"$?"查看他的执行状态
  5. $0 当前执行的进程名
  6. $$ 当前进程的进程号

脚本变量的特殊用法(单双引号见开头,反引号``,\转义符,两种命令序列)

  1. ``一般加的是系统命令,例如date表示返回系统时间
  2. () 里面的命令相当于子命令,可以调用父命令的变量,只在内部使用,不改变原来的值
  3. {} 在当前的同级shell中执行,会影响所使用的变量值 注意使用转义符之前需要加上-e
echo -e "##\n##"

变量的扩展

image.png

字符串以及数组的操作

字符串操作

  1. 计算长度 echo ${#变量名}
  2. 提取子串 ${变量名:start:end}
  3. 拼接字符串 字符串a字符串a 字符串b
  4. 查找子串 expr index "$父串" 子串 ①所有运算表达式都需要放在``中②表达式运算符前后要有空格,跟赋值有区别
  5. 替换字符串
echo ${string/3/0}  #用0替换第一个遇见的3 
echo ${string//3/0}  #用0替换串中所有3

数组的定义和使用

数组定义可以不使用连续的下标,且下标范围没有限制

array1=(val1 val2 val3)
array[3]=val4
$array[index]  #读取数组下标元素
$array[*/@]  #都表示获取数组中的全部元素
${#array[*/@]}  #获取数组的长度

文件测试运算符

image.png

字符串测试运算符

  1. = 相等
  2. != 不等
  3. -z 空串
  4. -n 非空串

关系运算符(都是英文单词的缩写,不做详细解释了)

  1. -eq
  2. -ne
  3. -gt
  4. -ge
  5. -lt
  6. -le

逻辑运算(可以不止有两个command)

  1. commandA && commandB 左边成功才执行右边
  2. commandA || commandB 左边失败才执行右边
  3. -a 且条件 test -r file -a -x file 只有file同时有r和x权限才返回true
  4. -o 或条件
  5. ! 取反条件

几种控制结构

if结构

image.png

  • 示例

image.png

while结构

image.png

util结构

image.png

case结构

image.png

定义函数

函数名() {
    函数体
}

function 函数名() {
    函数体
}

调用函数,函数名 参数1 参数2 ... image.png