argor

   :: 首页  :: 新随笔  :: 联系 ::  :: 管理

 

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

 


  脚

 

posted on 2017-11-29 13:54  argor  阅读(198)  评论(0)    收藏  举报