注释和编译器选择
- 单个#表示注释
- <<EOF EOF表示多行注释
- #! /bin/bash用于选定bin下的bash来进行脚本解释,否则默认使用shell
变量定义(注意一点,等号赋值两边都不能加空格)
- 加单引号和不加单引号都是表示普通赋值
- ""中一般可以用于解析变量值
ret=100
echo "ret的值=$ret"
一个好习惯,给所有的变量加上{},界定变量名范围
变量类型定义
typeset -需要赋值的类型 需要设置类型的变量名
typedef -i data
几个常用的关键字
- echo 用于打印 echo $PATH用于打印环境变量PATH的值
- env 用于打印所有环境变量
- unset 用于清除变量值
- read 变量名 用于读取键盘输入存到后面跟随的变量名中
- readonly 只读变量
预设变量(由shell直接提供的无需定义的变量)
- $# 传给脚本的参数数量
- $* 传给shell脚本的参数的内容
- $1,$2,$3,... 运行脚本时传递给他的参数,空格隔开
- $? 命令执行后返回的状态,一般在一个命令执行后,可以用"$?"查看他的执行状态
- $0 当前执行的进程名
- $$ 当前进程的进程号
脚本变量的特殊用法(单双引号见开头,反引号``,\转义符,两种命令序列)
- ``一般加的是系统命令,例如date表示返回系统时间
- () 里面的命令相当于子命令,可以调用父命令的变量,只在内部使用,不改变原来的值
- {} 在当前的同级shell中执行,会影响所使用的变量值 注意使用转义符之前需要加上-e
echo -e "##\n##"
变量的扩展
字符串以及数组的操作
字符串操作
- 计算长度 echo ${#变量名}
- 提取子串 ${变量名:start:end}
- 拼接字符串 字符串b
- 查找子串
expr index "$父串" 子串①所有运算表达式都需要放在``中②表达式运算符前后要有空格,跟赋值有区别 - 替换字符串
echo ${string/3/0} #用0替换第一个遇见的3
echo ${string//3/0} #用0替换串中所有3
数组的定义和使用
数组定义可以不使用连续的下标,且下标范围没有限制
array1=(val1 val2 val3)
array[3]=val4
$array[index] #读取数组下标元素
$array[*/@] #都表示获取数组中的全部元素
${#array[*/@]} #获取数组的长度
文件测试运算符
字符串测试运算符
- = 相等
- != 不等
- -z 空串
- -n 非空串
关系运算符(都是英文单词的缩写,不做详细解释了)
- -eq
- -ne
- -gt
- -ge
- -lt
- -le
逻辑运算(可以不止有两个command)
- commandA && commandB 左边成功才执行右边
- commandA || commandB 左边失败才执行右边
- -a 且条件 test -r file -a -x file 只有file同时有r和x权限才返回true
- -o 或条件
- ! 取反条件
几种控制结构
if结构
- 示例
while结构
util结构
case结构
定义函数
函数名() {
函数体
}
function 函数名() {
函数体
}
调用函数,函数名 参数1 参数2 ...