当前位置 : 主页 > 操作系统 > centos >

常用的脚本编程知识点

来源:互联网 收集:自由互联 发布时间:2022-06-20
1、变量中字符的长度:${#VARNAME} #A='hello world' #echo ${#A} --显示定义变量A的长度,输出结果为11 #11 2、变量赋值等: ${parameter:-word}:如果parameter为空或未定义,则变量展开为word;否则,展


1、变量中字符的长度:${#VARNAME}
#A='hello world'
#echo ${#A}    --显示定义变量A的长度,输出结果为11
#11
2、变量赋值等:
${parameter:-word}:如果parameter为空或未定义,则变量展开为“word”;否则,展开为parameter的值;
${parameter:+word}:如果parameter为空或未定义,不做任何操作;否则,则展开为“word”值;
${parameter:=word}:如果parameter为空或未定义,则变量展开为“word”,并将展开后的值赋值给parameter;
${parameter:offset}:去掉定义的偏移数
${parameter:offset:length}:取子串,从offset处的后一个字符开始,取lenth长的子串

  • --------------------------------------------------------  
  • 最常使用的是第一种,比如:  
  • ${parameter:-word}  
  • #A=3  
  • #echo ${A:-30}     ---表示变量A不空时,表达式就使用变量自身的值  
  • #3  
  • #unset A  
  • #echo ${A:-30}     ---表示变量A为空时,表达式就会使用自身的值  
  • #30  
  • #A=${A:-30}        ---表示变量A为空时,就会使用自身的值赋给变量A  
  • #echo $A           ---表示变量A不空时,就会使用变量A的值再次赋给变量A  
  • #30  
  • ${parameter:+word}  
  • #A=3  
  • #echo ${A:+30}     ---表示变量A不空时,就会使用word的值  
  • #3  
  • #unset A  
  • #echo ${A:+30}     ---表示变量A为空时,其值为空  
  • #为空  
  • ${parameter:=word}  
  • #unset A  
  • #echo ${A:=30}    --表示变量A为空时,不仅把这个表达式展开为这个字符串,而且把字符串值赋给A  
  • #30  
  • ${parameter:offset}  
  • #A='hello world'   ---定义一个变量  
  • #echo ${A:2}       ---数字2表示变量A中的字符串自左向右偏移2个,显示从偏移后的所有内容  
  • #llo world           
  • ${parameter:offset:length}  
  • #echo ${A:2:3}     ---数字2表示变量A中的字符串自左向右偏移2个,数字3表示从偏移位置之后要取3个字符  
  • #llo               
  • ----------------------------------------------------------- 
  • 3、脚本配置文件
    服务脚本通常放在/etc/rc.d/init.d下,一般命名为:/etc/rc.d/init.d/服务脚本
    而服务脚本所支持配置文件通常命名为:/etc/sysconfig/服务脚本同名的配置文件
    (一般脚本支持的配置文件都会放在sysconfig下,就会判定sysconfig中是否为变量提供值,如果没有赋值,就是用下面操作中为变量赋值)
    比如:编辑一个脚本a.sh,脚本的配置文件定义为a.conf

  • ---------------------------------------------------------  
  • 脚本内容:  
  • #!/bin/bash  
  • #  
  • . /root/a.conf      ---把a.sh的配置文件读取进来,假设配置文件在/root下,当执行脚本时,脚本会调用配置文件中所定义的字符串  
  • TEST=${TEST:-info}   ---假如配置文件没有为变量TEST定义内容,就会使用在此处为变量定义的字符串  
  • [ -n "$TEST" ] && echo $TEST   ---如果变量不为空,就显示$TEST的值  
  • 为脚本编辑一个配置文件a.conf  
  • 配置文件内容:  
  • TEST='hello world'    ---为变量TEST定义值  
  • -------------------------------------------------------- 
  • 4、如果脚本中的函数变量与全局变量重名,可以在脚本中使用定义局部变量
    格式:local VAR_NAME=

  • ---------------------------------------------------------  
  • 下面演示变量的作用域  
  • a=1  
  • test() {  
  •  local a=$[3+4]   
  • }     
  • test  
  • for I in `seq $a 10`; do  
  •  echo $I  
  • done  
  • ---如果在全局中定义的变量a与函数中定义的变量a有冲突,可以使用local来定义  
  • ---如果不加local定义时,输出的结果为7 8 9 10,加上local定义,输出的结果为从1到10  
  • --------------------------------------------------------- 
  • 5、命令mktemp
    为了避免自己创建文件或目录与别人创建的文件或目录不冲突,我们可以引用命令mktemp
    创建临时文件,每一次执行这个命令都会生成一个不同名称文件,可以使用一个定义变量引用,这时候文件名称就不会变化;

  • --------------------------------------  
  • #mktemp /tmp/file.XX  
  • #FILE=`mktemp /tmp/file.XX`  
  • #echo $FILE  
  • 创建临时目录  
  • #mktemp -d /tmp/file.XX  
  • #DIR=`mktemp -d /tmp/file.XX`  
  • #echo $DIR  
  • -------------------------------------- 
  • 6、信号(信号是进程间通信的一种方式,是一个进程向另一个进程发送短小信息,能够实现控制另外一个进程的运作机制,通常使用kill命令)
    格式:kill -信号 进程号
    常使用的信号:
       1、HUP
       2、INT
       9、KILL
       15、TERM  
    脚本中也能实现信号捕捉,但9和15无法捕捉;要想在脚本中实现信号捕捉可以使用trap命令
    格式:trap 'COMMAND' 信号列表
    通过编辑一个捕捉信号的脚本来演示trap命令的效果;

  • ---------------------------------------------------------  
  • #!/bin/bash  
  • NET=192.168.0   
  • trap 'echo "quit"' INT 
  • for I in {200..254}; do  
  •   if ping -c 1 -W 1 $NET.$I &> /dev/nullthen 
  •      echo "$NET.$I is up." 
  •   else 
  •      echo "$NET.$I is down." 
  •   fi  
  • done  
  • ---当执行quit时,让ping命令捕捉信号,不过只是暂时捕捉,之后还会执行ping命令     
  • ---如果既想执行quit又想exit时,可在上面脚本中一行执行多个语句,语句间用分号分隔  
  • 比如:trap 'echo "quit",exit 1' INT   --此处的INT表示捕捉信号  
  • -------------------------------------------------------- 
  •  

    上一篇:第十四集RIP路由协议真机配置记录
    下一篇:没有了
    网友评论