Sabrina 2019-12-11
${parameter:-word}:如果parameter为空或未定义,则变量展开为"word";否则,展开为parameter的值; ${parameter:+word}:如果parameter为空或未定义,不做任何操作;否则,展开为"word"值; ${parameter:=word}:如果parameter为空或未定义,则变量展开为"word",并将展开后的值赋值给parameter; ${parameter:?word}:如果parameter为空或未定义,则显示为错误,错误信息为"word"; ${parameter:2}:跳过parameter的前两个字符,取parameter后面的所有字符; ${parameter:2:3}:跳过parameter的前两个字符,从parameter的第三个字符开始往后取三个字符;
[ ~]# vim test.sh #!/bin/bash . /root/f1.txt TEST=${TEST:-‘hello world‘} #如果f1.txt中定义了TEST变量的值,就打印TEST值;如果f1.txt中未定义或TEST值为空,就打印后面的‘hello world‘; [ -n "$TEST" ] && echo "$TEST"
local VAR_NAME function test { local a=$[3+4] } 在函数中定义局部变量,只在函数中有效,不影响函数外的变量;如果函数外也有同名的变量a,则函数中的变量a只在函数中有效,与函数外的变量a不冲突
生成临时目录和文件; 生成临时目录:-d /tmp/目录每隔30天会做一次清理,30天没有被访问过的将会被清理 [ ~]# mktemp /tmp/file.XXXXX /tmp/file.eJehp [ ~]# mktemp /tmp/file.XXXXX /tmp/file.0Z7KZ 生成随机指定字符个数后缀的文件,并且打印出文件路径 [ ~]# FILE=`mktemp /tmp/file.XXXXX` #把mktemp生成的临时文件和路径赋值给FILE变量
kill -SIGNAL(信号) PID(进程编号) 1:HUP;终端断线 2:INT;中断(同 Ctrl + C) 3:QUIT;退出(同 Ctrl + \) 9:KILL;强制终止 15:TER;终止 脚本中,可以实现信号捕捉;但9和15信号捕捉不了;如果9和15信号可以捕捉,抓到信号抛弃掉,会造成脚本终止不了; trap命令:bash_shell内置命令,可以实现信号捕捉; trap ‘command‘ 信号列表 示例1: [ ~]# vim date.sh #!/bin/bash trap ‘echo "You go...";exit 1‘ INT #INT(2)信号等同于ctrl+c;设定信号捕捉,当捕捉到ctrl+c(2)信号时,用打印You go和exit代替2信号 while :;do date sleep 2 done [ ~]# bash date.sh Wed Dec 11 20:00:42 CST 2019 Wed Dec 11 20:00:45 CST 2019 ^CYou go... 示例2: [ ~]# vim ping.sh #!/bin/bash FILE=`mktemp /tmp/file.XXXXX` #函数外定义的变量可以用于函数中 NET=192.168.0 function signal { echo "quit" rm -f $FILE exit 1 } trap ‘signal‘ INT #当接收到ctrl+c(2)信号时,执行signal函数,用于代替2信号 for i in {200..254};do if ping -c 1 -W 1 $NET.$i &>/dev/null;then #ping命令会接收ctrl+c信号,所以不会退出循环 echo "$NET.$i is up" | tee >> $FILE #tee命令会把标准输入的内容输出到一个文件中 else echo "$NET.$i is down" fi done