1、变量中字符的长度:${#VARNAME} #A='hello world' #echo ${#A}    --显示定义变量A的长度,输出结果为11 #11 2、变量赋值等: ${parameter:-..."> 1、变量中字符的长度:${#VARNAME} #A='hello world' #echo ${#A}    --显示定义变量A的长度,输出结果为11 #11 2、变量赋值等: ${parameter:-..." /> 1、变量中字符的长度:${#VARNAME} #A='hello world' #echo ${#A}    --显示定义变量A的长度,输出结果为11 #11 2、变量赋值等: ${parameter:-..." />
用户登录
用户注册

分享至

常用的脚本编程知识点

  • 作者: 期望4405047
  • 来源: 51数据库
  • 2020-08-28
editor-side-new">


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长的子串

  1. --------------------------------------------------------  
  2. 最常使用的是第一种,比如:  
  3. ${parameter:-word}  
  4. #A=3  
  5. #echo ${A:-30}     ---表示变量A不空时,表达式就使用变量自身的值  
  6. #3  
  7. #unset A  
  8. #echo ${A:-30}     ---表示变量A为空时,表达式就会使用自身的值  
  9. #30  
  10. #A=${A:-30}        ---表示变量A为空时,就会使用自身的值赋给变量A  
  11. #echo $A           ---表示变量A不空时,就会使用变量A的值再次赋给变量A  
  12. #30  
  13. ${parameter:+word}  
  14. #A=3  
  15. #echo ${A:+30}     ---表示变量A不空时,就会使用word的值  
  16. #3  
  17. #unset A  
  18. #echo ${A:+30}     ---表示变量A为空时,其值为空  
  19. #为空  
  20. ${parameter:=word}  
  21. #unset A  
  22. #echo ${A:=30}    --表示变量A为空时,不仅把这个表达式展开为这个字符串,而且把字符串值赋给A  
  23. #30  
  24. ${parameter:offset}  
  25. #A='hello world'   ---定义一个变量  
  26. #echo ${A:2}       ---数字2表示变量A中的字符串自左向右偏移2个,显示从偏移后的所有内容  
  27. #llo world           
  28. ${parameter:offset:length}  
  29. #echo ${A:2:3}     ---数字2表示变量A中的字符串自左向右偏移2个,数字3表示从偏移位置之后要取3个字符  
  30. #llo               
  31. ----------------------------------------------------------- 

3、脚本配置文件
服务脚本通常放在/etc/rc.d/init.d下,一般命名为:/etc/rc.d/init.d/服务脚本
而服务脚本所支持配置文件通常命名为:/etc/sysconfig/服务脚本同名的配置文件
(一般脚本支持的配置文件都会放在sysconfig下,就会判定sysconfig中是否为变量提供值,如果没有赋值,就是用下面操作中为变量赋值)
比如:编辑一个脚本a.sh,脚本的配置文件定义为a.conf

  1. ---------------------------------------------------------  
  2. 脚本内容:  
  3. #!/bin/bash  
  4. #  
  5. . /root/a.conf      ---把a.sh的配置文件读取进来,假设配置文件在/root下,当执行脚本时,脚本会调用配置文件中所定义的字符串  
  6. TEST=${TEST:-info}   ---假如配置文件没有为变量TEST定义内容,就会使用在此处为变量定义的字符串  
  7. [ -n "$TEST" ] && echo $TEST   ---如果变量不为空,就显示$TEST的值  
  8. 为脚本编辑一个配置文件a.conf  
  9. 配置文件内容:  
  10. TEST='hello world'    ---为变量TEST定义值  
  11. -------------------------------------------------------- 

4、如果脚本中的函数变量与全局变量重名,可以在脚本中使用定义局部变量
格式:local VAR_NAME=

  1. ---------------------------------------------------------  
  2. 下面演示变量的作用域  
  3. a=1  
  4. test() {  
  5.  local a=$[3+4]   
  6. }     
  7. test  
  8. for I in `seq $a 10`; do  
  9.  echo $I  
  10. done  
  11. ---如果在全局中定义的变量a与函数中定义的变量a有冲突,可以使用local来定义  
  12. ---如果不加local定义时,输出的结果为7 8 9 10,加上local定义,输出的结果为从1到10  
  13. --------------------------------------------------------- 

5、命令mktemp
为了避免自己创建文件或目录与别人创建的文件或目录不冲突,我们可以引用命令mktemp
创建临时文件,每一次执行这个命令都会生成一个不同名称文件,可以使用一个定义变量引用,这时候文件名称就不会变化;

  1. --------------------------------------  
  2. #mktemp /tmp/file.XX  
  3. #FILE=`mktemp /tmp/file.XX`  
  4. #echo $FILE  
  5. 创建临时目录  
  6. #mktemp -d /tmp/file.XX  
  7. #DIR=`mktemp -d /tmp/file.XX`  
  8. #echo $DIR  
  9. -------------------------------------- 

6、信号(信号是进程间通信的一种方式,是一个进程向另一个进程发送短小信息,能够实现控制另外一个进程的运作机制,通常使用kill命令)
格式:kill -信号 进程号
常使用的信号:
   1、HUP
   2、INT
   9、KILL
   15、TERM  
脚本中也能实现信号捕捉,但9和15无法捕捉;要想在脚本中实现信号捕捉可以使用trap命令
格式:trap 'COMMAND' 信号列表
通过编辑一个捕捉信号的脚本来演示trap命令的效果;

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

 

软件
前端设计
程序设计
Java相关