1、变量中字符的长度:${#VARNAME} 

  1. eg:A="Starting tserver"

  2. echo $(#A)   查看A有几个字符  

  3. ssty -F /dev/conole size 显示标准屏幕的大小(有多少行、列)  

  4. ssty -F /dev/conole size | cut -d' ' -f2    显示屏幕的列数  

  5. ssty -F /dev/conole size | awk '{print $2}'

  6. A=`ssty -F /dev/conole size`  

  7. echo $A  

  8. echo ${A#* }  从左往右取找到第一个空格作为分隔符后的内容显示出来  

  9. echo ${A##* } 从左往右取找到最后一个空格作为分隔符后的内容显示出来  

  10. A=`25 80 100 90`  

  11. echo ${A#* }       显示结果为 80 100 90 从左往右取找到第一个空格作为分隔符后的内容显示出来  

  12. echo ${A##* }      显示结果为 90    从左往右取找到最后一个空格作为分隔符后的内容显示出来  

  13. echo ${A% *}       显示为25 80  100   从右往左去找到第一个空格后的内容去掉  

  14. echo ${A%% *}      显示为25   从右往左去找到最后一个空格空格后的内容去掉  

2、变量赋值等 

  1. ${parameter:-word}:如果parameter为空或未定义,则变量展开为“word”;否则,展开为parameter的值;  

  2. ${parameter:+word}:如果parameter为空或未定义,不做任何操作;否则,则展开为“word”值;  

  3. ${parameter:=word}:如果parameter为空或未定义,则变量展开为“word”,并将展开后的值赋值给parameter;  

  4. ${parameter:offset}  取子串,从offset处的后一个字符开始取后面所有的子串  

  5. ${parameter:offset:length}:取子串,从offset处的后一个字符开始,取lenth长的子串;  

  6. eg:A=3            给A赋值  

  7.     echo ${A:-30}  显示为3  

  8.     unset A        撤销A的值  

  9.     echo ${A:-30}  显示为30  

  10.     echo $A        显示为空  

  11.     A=${A:-30}     如果A值不空就为A,如果A为空就把30赋值给A   

  12.     echo $A        显示为30  

  13.     unset A        撤销A的值  

  14.     echo ${A:+30}  显示为空  

  15.     echo ${A:=30}  显示为30   如果A为空的话不仅把字符串展示为A还把字符串赋值给A  

  16.     echo $A        显示为30  

  17. eg:A='hello world'

  18.     echo ${A:2:3}  偏移过去2个从第三个字符开始取3个  显示为llo             

  19.     echo ${A:2}    偏移过去2个去后面所有的字符串 显示为llo world   

3、脚本配置文件

  1. /etc/rc.d/init.d/服务脚本  

  2. 服务脚本支持配置文件:/etc/sysconfig/服务脚本同名的配置文件  

  3. eg:vim aa.conf   编辑配置文件  

  4. TEST='hello word'

  5. vim aa.sh  

  6. #!/bin/bash  

  7. #  

  8. ./root/aa.conf  

  9. TEST=${TEST:-info}     若TEST为空则显示为info  

  10. [ -n "$TEST" ] && echo $TEST  

# chmod +x aa.sh  为aa.sh添加执行权限  

# ./aa.sh   测试显示 hello world  

4、局部变量

  1. local VAR_NAME=  

  2. local定义变量名  

eg:vim b.sh  编辑脚本内容如下:

  1. #!/bin/bash  

  2. a=1  

  3. test() {  

  4. local a=$[3+4]     (local指在局部范围内有效)  

  5. }  

  6. test  

  7. for I in `seq $a 10`; do  

  8.   echo $I  

  9. done    

# chmod +x b.sh  为b.sh添加执行权限  

# ./b.sh     执行结果显示为 1 2 3 4 5 6 7 8 9 10   

5、命令mktemp  

  1. 创建临时文件或目录  

  2. mktemp /tmp/file.XX(XX表示生成的随机数值当成文件名)  

  3.     -d: 创建为目录  

  4. eg:FILE=`mktemp /tmp/file.XX`  

  5.     echo $FILE  

  6. eg: mktemp -d /tmp/file.XX  

6、信号 (进程间通信的一种方式,一个进程向另外一个进程发送的短小信息,能够实现控制另外一个进程的运作法则或运作机制) 

  1. kill -SIGNAL PID  

  2.     1: HUP  

  3.     2: INT

  4.     9: KILL  

  5.     15: TERM  

  6. 每一个信号前都要加上signal      

  7. 脚本中,能实现信号捕捉,但9和15无法捕捉  

  8. Ctrl+c: SIGINT INT  结束当前进程  

  9. trap命令:(捕捉信号)  

  10.     用法:trap 'COMMAND' 信号列表  

eg:vim showdate.sh  编辑脚本内容如下:

  1. #!/bin/bash  

  2. #  

  3. trap 'echo "You go..."INT   此种方式可以脚本中捕捉他人发送的信号,拒绝Ctrl+c     

  4. while :; do  

  5. date

  6.   sleep 2  

  7. done  

# chmod +x showdate.sh  添加执行权限

# ./showdate.sh   执行脚本内容,显示为You go...     

  1. kill %1  即可停止  

eg:vim ping.sh  编辑脚本内容如下:

  1. #!/bin/bash  

  2. #  

  3. NET=192.168.0  

  4. FILE=`mktemp /tmp/file.xx`  

  5. clearup() {  

  6.   echo "quit..."

  7.   exit 1  

  8.   rm -f $FILE     清理工作  

  9. }   

  10. trap 'clearup'INT

  11. for I in {200..254};do  

  12.   if ping -c 1 -W 1 $NET.$I &> /dev/null;then

  13.     echo "$NET.$I is up." | tee >> $FILE  

  14. else

  15.     echo "$NET.$I is down."

  16.   fi  

  17. done  

# chmod +x ping.sh  添加执行权限

# ./ping.sh     执行脚本命令

7、一行执行多个语句,语句间用分号分隔  

实例:

  1. eg:vim ping.sh  编辑脚本ping.sh内容如下:

  2. #!/bin/bash  

  3. #  

  4. NET=192.168.0  

  5. trap 'echo "quit.";exit1'INT   两个命令间用逗号隔开  

  6. for I in {200..254};do  

  7.   if ping -c 1 -W 1 $NET.$I &> /dev/null;then

  8.     echo "$NET.$I is up."

  9. else

  10.     echo "$NET.$I is down."

  11.   fi  

  12. done  

# chmod +x ping.sh  添加执行权限

# ./ping.sh    执行脚本内容