1.isNumber 2.命令可用 3.当前用户是root |
1.isNumber
判断“字符串”是否是个数字:
declare chkNumber=0 isNumber(){ parameter1=$1 repParameter1=$(echo $parameter1 | sed 's/[[:digit:]]//g' 2>/dev/null) decimalPoint=$(echo $repParameter1 | sed 's/.//' 2>/dev/null) local -i oriLength=${#parameter1} local -i repLength=${#repParameter1} local -i decLength=${#decimalPoint} [ $oriLength -gt 0 ] && [ $repLength -eq 0 ] && let chkNumber=1 [ $oriLength -gt 0 ] && [ $repLength -eq 1 ] && [ $decLength -eq 0 ] && let chkNumber=2 }
字符串以位置参数形式传递进来,结果由变量“chkNumber”表示(不是数字就返回“0”,是整数返回“1”,是浮点数返回“2”)。
使用案例:判断进程使用的cpu百分比
1 #!/bin/bash 2 # ps -C java -o %cpu 3 4 declare -i CPUPERCENT=0 5 declare -i counter=1 6 declare PROG="java" 7 declare ITEM1="pcpu" 8 declare chkNumber=0 9 declare pid="" 10 11 isNumber(){ 12 parameter1=$1 13 repParameter1=$(echo $parameter1 | sed 's/[[:digit:]]//g' 2>/dev/null) 14 decimalPoint=$(echo $repParameter1 | sed 's/.//' 2>/dev/null) 15 local -i oriLength=${#parameter1} 16 local -i repLength=${#repParameter1} 17 local -i decLength=${#decimalPoint} 18 19 [ $oriLength -gt 0 ] && [ $repLength -eq 0 ] && let chkNumber=1 20 [ $oriLength -gt 0 ] && [ $repLength -eq 1 ] && [ $decLength -eq 0 ] && let chkNumber=2 21 } 22 23 for i in $(ps -C java -o pid,$ITEM1) 24 do 25 chkNumber=0 26 let counter=counter%2 27 if [ 0 -eq $counter ]; then 28 isNumber $i 29 else 30 pid=$i 31 fi 32 33 if [ $chkNumber -gt 0 ]; then 34 echo "pid is $pid, cpu used ${i}% by $PROG." 35 fi 36 37 let counter++ 38 done
运行效果:
[view@payqa2 ~]$ ./chkCPU pid is 3988, cpu used 0.0% by java. pid is 21116, cpu used 0.1% by java. pid is 27698, cpu used 0.1% by java.
2.命令可用
脚本中,会用到判断命令可用,或者某个rpm包存在。
把需要判断的‘命令’、‘rpm包’分别赋值给变量packages、commands。当脚本调用后,变量 var_checkResult 为0时,表示‘命令’、‘rpm包’都可用、存在。
packages=(tar bzip2 coreutils) commands=(tar bzip2 md5sum) declare -i k=0 declare -i PackMaxLength=${#packages[@]} declare -i CommMaxLength=${#commands[@]} isResultOk() { if [ 0 -eq $var_checkResult ];then let k=k+1 fi } fun_chkPackages() { local -i i for((i=0; i<PackMaxLength; i++)); do rpm -q ${packages[$i]} var_checkResult=$? isResultOk done } fun_chkCommands() { local -i i for((i=0; i<CommMaxLength; i++)); do env which ${commands[$i]} 1>/dev/null var_checkResult=$? isResultOk done } fun_chkPackages fun_chkCommands let var_checkResult=CommMaxLength+PackMaxLength-k
3.当前用户是root
脚