一、变量赋值等:
${parameter:-word}:如果parameter为空或未定义,则变量展开为“word”;否则,展开为parameter的值;
${parameter:+word}:如果parameter为空或未定义,不做任何操作;否则,则展开为“word”值;
${parameter:=word}:如果parameter为空或未定义,则变量展开为“word”,并将展开后的值赋值给parameter;
${parameter:offset}
${parameter:offset:length}:取子串,从offset处的后一个字符开始,取lenth长的子串;
例:
A=3 给A赋值
echo ${A:-30} 显示为3
unset A 撤销A的值
echo ${A:-30} 显示为30
echo $A 显示为空
A=${A:-30} 如果A值不空就为A,如果A为空就把30赋值给A
echo $A 显示为30
unset A 撤销A的值
echo ${A:+30} 显示为空
echo ${A:=30} 显示为30 如果A为空的话不仅把字符串展示为A还把字符串赋值给A
echo $A 显示为30
例:
A='hello world'
echo ${A:2:3} 偏移过去2个从第三个字符开始取3个 显示为llo
echo ${A:2} 偏移过去2个去后面所有的字符串 显示为llo world
二、脚本配置文件
1、脚本:命令的堆砌,按实际需要,结合命令的流程控制实现的源程序
#!/bin/bash 第一行
后面的#只做注释,不执行
2、脚本在执行时会启动一个子shell进程:
命令行中启动的脚本会继承当前shell环境变量
系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量
3、 /etc/rc.d/init.d/服务脚本
服务脚本支持配置文件:/etc/suysconfig/服务脚本同名的配置文件
三、变量
1、 特殊变量:
$?: 上一个命令的执行状态返回值
程序执行结束
程序状态反回代码(0-255)
0:正确执行
1-255 :错误执行,1、2、127系统预留;
$#: 参数的个数
$*: 参数列表
$@: 参数列表
2、本地变量
VARNAME=VALUE:作用域为整个bash进程;
3、局部变量:
local VARNAME=VALUE:作用域为当前代码段;
4、环境变量:作用域为当前shell进程及其子进程:
export VARNAME=VALUE
“导出”
5、位置变量:$1,$2,......(用于传递参数)
shift 替换已使用过的位置变量
shift n 替换n个位置变量
四、脚本中用的特殊命令mktemp
创建临时文件或目录
mktemp /tmp/file.XX
-d: 创建为目录
五、信号 :进程间通信的一种方式,一个进程向另外一个进程发送的短小信息,能够实现 控制另外一个进程的运作法则或运作机制
trap命令:脚本中,实现信号捕捉,但9和15无法捕捉
常见信号
kill -SIGNAL PID
1: HUP
2: INT 终止信号 ctrl +c
9: KILL 后台
15: TERM
六、shell中的选择语句
1、If语句:
1)、条件判断,控制结构:
单分支if语句;
if 判断条件; then
statement1
statement2
。。。。。
fi
2)、双分支的if条件语句
if 判断条件; then
statement1
statement2
。。。。。
else
statement3
statement4
。。。。。
Fi
3)、多分支的if语句
if 判断条件1; then
statement1
。。。。。
elif 判断条件2 ;then
statement2
。。。。。
elif 判断条件3 ;then
statement3
。。。。。
else
。。。。。
Fi
4)、case语句:
case switch in (注:swich是变量)
value1)
statement
。。。
;;
value1)
statement
。。。
;;
*)
statement
。。。
;;
esac
2、循环语句
1)、for循环:
for 变量 in 列表; do
循环体
done
注:遍历完成后退出
2)、while循环语句:
while 判断条件(直到条件不符合停止循环); do
statement
。。。
。。。
done
3)、until循环语句
until 判断条件(直到条件符合停止循环) ; do
statement
。。。
。。。
done
3、特殊循环语句:
while的特殊用法一:
while :;do
tatement
。。。
。。。
done
这是个死循环,会一直循环去,除非exit退出脚本或break跳出循环
while的特殊用法二:
while read LINE; do
statement
done < /PATH/TO/SOMEFILE
逐行读取//PATH/TO/SOMEFILE,并赋值给LINE
七、shell中使用的算术运算
A=3
B=6
1、let 算术表达式
let C=$A+$B
let支持的运算
let a+=$q 就是let a=a+$q
a++ 就a的自加1
a-- a自减1
--a
++a
2.、$[算术运算表达式]
C=$[$A+$B]
3、$((算术表达式))
C=$(($A+$B))
4.、expr 算术表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用
C=`expr $A + $B`