脚本编程知识点:
* FILE=/usr/local/src
TEST=${FILE#*/}:$TEST结果为usr/local/src, 以/为关键字,删除从左边数第一个/及关键字/左边的所有字符串。
DEST=${FILE##*/}:$DEST结果为src,以/为关键字,删除最后一个关键字/及关键字/左边的所有字符串。 从左往右时,*号需在关键字左边
DOTEST=${FILE%/*}:$DOTEST结果为/usr/local,以/为关键字,删除从右边数第一个/及关键字/右边的所有字符串。
DODEST=${FILE%%/*}:$DODEST结果为空,以/为关键字,删除从右边数最后一个/及关键字/右边的所有字符串。 从右往左时,*号需在关键字右边
1、如何获取变量中字符的长度:
${#VARNAME} VARNAME变量名
Usage:
[root@localhost ~]# VARNAME1='TESTING SERVER'
[root@localhost ~]# echo "${#VARNAME1}"
14 统计变量VARNAME1的字符长度,空格也占字符长度
2、变量赋值等:
设定变量名为p
${p:-word}:如果p为空或未定义,则变量展开为"word",但p本身值不变,否则,展开为p本身的值
${p:+word}:如果p为空或未定义,则变量的值为p本身的值;否则,变量的值为"word",但p本身的值不变
${p:=word}:如果p为空或未定义,则变量的值为"word";并将word赋值给p
A=${parte:num}:A的值为parte往右偏移num个后剩余的所有字符
A=${parte:num1:length}:A的值为parte往右偏移num1个后的length长的字符串
Usage:
[root@localhost ~]# A='hello world'
[root@localhost ~]# echo "${A:2:3}"
llo
[root@localhost ~]# echo "${A:2}"
llo world
[root@localhost ~]# echo "${A:3:5}"
lo wo
Usage:
[root@localhost ~]# A=3 先给A赋值为3
[root@localhost ~]# echo ${A:-30} 因为A的值为3,所以不为空
3 ${A:-30}的值为本身3
[root@localhost ~]# unset A 取消A的赋值后A的值为空
[root@localhost ~]# echo ${A:-30} 因为A的值为空
30 ${A:-30}的值为30
[root@localhost ~]# echo $A 但是此时A的值仍为空
[root@localhost ~]# A=${A:-30}
[root@localhost ~]# echo $A
30
3、脚本配置文件:
/etc/rc.d/init.d/服务脚本
服务脚本支持配置文件:/etc/sysconfig/服务脚本同名的配置文件
4、局部变量:在变量名前面加local
local VAR_NAME= 该变量的作用域只是局部范围。
5、命令mktemp:创建临时文件或目录
mktemp /tmp/file.XX 随机创建文件名为file.XX的临时文件,不重名xx为随机不重名的2个字符
-d:创建临时目录
[root@localhost ~]# mktemp /tmp/file.XX
/tmp/file.49
[root@localhost ~]# mktemp /tmp/file.XXXX
/tmp/file.5453
[root@localhost ~]# mktemp /tmp/file.XXXX
/tmp/file.5454
[root@localhost ~]# mktemp /tmp/file.XXXXXXXXX
/tmp/file.VHPK15455
[root@localhost ~]# mktemp /tmp/file.XXXXXXXXX
/tmp/file.GOHB15456
[root@localhost ~]# mktemp -d /tmp/file.XX 创建临时目录
/tmp/file.59
[root@localhost ~]# ls /tmp
busybox file.49 file.51 file.5453 file.59 file.VHPK15455
busybox2 file.50 file.52 file.5454 file.GOHB15456
6、信号捕捉:trap命令
常见的信号: kill -SIGNAL PID
1:SIGHUP;让一个进程不用重启,就可以重读其配置文件,并让新的配置信息生效。
2:SIGINT;相当于ctrl+c,中止一个前台进程
9:SIGKILL;杀死一个进程,强制的把进程终止。
15:SIGTERM;安全的终止一个进程,可以留给用户操作时间,比如保存正在修改的文件后再终止
18:SIGCONT;把前台进程放入后台继续执行,相当于bg
19:SIGSTOP;把前台进程放至后台并停止执行,相当于ctrl+z
trap命令:信号捕捉命令 SIGKILL和SIGTERM信号无法捕捉
trap 'COMMAND' 信号列表 trap 'echo "you go"' SIGINT
[root@localhost ~]# vim showdate.sh
#!/bin/bash
#
trap 'echo "you go"' SIGINT #捕捉到SIGINT信号后执行echo命令
while :; do
date
sleep 2
done
[root@localhost ~]# ./showdate.sh
2016年 12月 17日 星期六 07:23:24 CST
2016年 12月 17日 星期六 07:23:26 CST
2016年 12月 17日 星期六 07:23:28 CST
you go 按ctrl+c也就是SIGINT信号,就执行echo命令
2016年 12月 17日 星期六 07:23:28 CST
2016年 12月 17日 星期六 07:23:30 CST
you go
2016年 12月 17日 星期六 07:23:31 CST
you go
2016年 12月 17日 星期六 07:23:32 CST
7、一行中执行多个语句,语句间用分号分隔
Usage: echo "continue" ; exit 1 输出continue后并退出。
8、如何获取屏幕显示大小所占多少行及每行字符总长度
stty -F /dev/console size
[root@localhost ~]# stty -F /dev/console size
25 80 25表示行数,80表示每行字符总长度
[root@localhost ~]# A=`stty -F /dev/console size`
[root@localhost ~]# echo ${A#* } 以空格为关键字,删除第一个空格及其左边的字符
80
. /etc/sysconfig/network-scripts/ifcfg-eth0 把ifcfg-eth0文件中的内容导入到当前文档中
Usage:
[root@test init.d]# vim /mnt/sysroot/etc/rc.d/init.d/network
#!/bin/bash
#
# chkconfig:35 09 90
# description: network service
prog=network
. /etc/rc.d/init.d/functions 把/etc/rc.d/init/d/functions文本中的内容添加至该文档中。
CONF=/etc/sysconfig/network-scripts/ifcfg-eth0
. $CONF
NETMASK=22
start() {
ifconfig eth0 $IPADDR/$NETMASK up
[ -z $GATEWAY ] && route add default gw $GATEWAY
return 0
}
stop() {
ifconfig eth0 down
}
status() {
ifconfig eth0
}
usage() {
echo "$prog: {start|stop|restart|status|"
}
case $1 in
start)
start
success "Config network eth0." ;;
stop)
stop
success "Stop network card eth0." ;;
restart)
stop
start
success "Restart network card eth0" ;;
status)
status ;;
*)
usage
exit 1 ;;
esac