1.交互式,用户输入一条命令就执行一条命令。
2.批处理,用户输入一系列的命令存在一个shell脚本中,让shell一次把这些命令执行完,而不是一条条执行。
#!/bin/bash
echo 'hello'
使用命令chmod +x ./脚本名 让脚本有执行权限,否则无法运行。 ./脚本名.sh 即可运行脚本。
shell变量:
shell里面变量名开头必须是字母,不能有空格,不能使用标点符号。只能包含字母,下划线,数字
输出变量时才加上$符号,变量名最好用花括号包起来,否则当变量名和其他的一些语句拼接时,不会解析变量。
readonly +变量名 设为只读的变量名后,之后对该变量进行的修改将失败。它会读取该变量设为保护之前的值
unset :删除变量 ,unset不能删除状态为readonly的变量。
获取变量长度:${#变量名}
截取变量:${变量名:几位开始截取:截取几位}
shell数组:shell中,只支持一维数组,跟php类似,单元已0开始,数组中的元素单元用空格隔开,array=(v1 v2 v3)
读取数组:${arrayname[0]}读取某个单元格的值,值为@的时候表示读取整个数组
获取数组长度:${#arrayname[@]} | ${#arrayname[*]}
如需要注释大段代码可以把它用大括号括起来定义为一个函数,没有地方调用这个函数,他就不会执行
shell传递参数:运行脚本的时候,后面带上参数,参数的顺序为$1,$2..$n
特殊变量:
$0 | 当前脚本的文件名 |
$n | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 |
$# | 传递给脚本或函数的参数个数。 |
$* | 传递给脚本或函数的所有参数。 |
$@ | 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。 |
$? | 上个命令的退出状态,或函数的返回值。 |
shell替换
命令替换,如date函数,shell中使用他,需要加上反引号``,否则会当成字符串解析
变量替换:
${var} | 变量本来的值 |
${var:-word} | 如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。 |
${var:=word} | 如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。 |
${var:?message} | 如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。 若此替换出现在Shell脚本中,那么脚本将停止运行。 |
${var:+word} | 如果变量 var 被定义,那么返回 word,但不改变 var 的值。 |
shell运算符:
bash中。我们运算经常用到的是expr命令,如计算和sum=`expr 2 + 2` 运算值之间要有空格
加:+ 减:- 乘:\* 除:/ 取模:%
shell判断结构:
if [] //变量与括号需要有空格 ,变量和运算符也要有空格
then
echo 'ok'
else
echo 'fail'
fi //结束标符,括号里面用到-ne -eq这类判断返回true或者false的,返回true走第一个,返回false走else步
-eq | 检测两个数是否相等,相等返回 true。 | [ $a -eq $b ] 返回 true。 |
-ne | 检测两个数是否相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ $a -gt $b ] 返回 false。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ $a -lt $b ] 返回 true。 |
-ge | 检测左边的数是否大等于右边的,如果是,则返回 true。 | [ $a -ge $b ] 返回 false。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ $a -le $b ] 返回 true。 |
布尔运算符
! | 非运算,表达式为 true 则返回 false,否则返回 true。 | [ ! false ] 返回 true。 |
-o | 或运算,有一个表达式为 true 则返回 true。 | [ $a -lt 20 -o $b -gt 100 ] 返回 true。 |
-a | 与运算,两个表达式都为 true 才返回 true。 | [ $a -lt 20 -a $b -gt 100 ] 返回 false。 |
= | 检测两个字符串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
!= | 检测两个字符串是否相等,不相等返回 true。 | [ $a != $b ] 返回 true。 |
-z | 检测字符串长度是否为0,为0返回 true。 | [ -z $a ] 返回 false。 |
-n | 检测字符串长度是否为0,不为0返回 true。 | [ -z $a ] 返回 true。 |
str | 检测字符串是否为空,不为空返回 true。 | [ $a ] 返回 true。 |