shell 的有用函數


1.isNumber 
java

2.命令可用 
git

3.當前用戶是root
bash


1.isNumberide


  判斷「字符串」是不是個數字:spa

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百分比ip

#!/bin/bash
# ps -C java -o %cpu

declare -i CPUPERCENT=0
declare -i counter=1
declare PROG="java"
declare ITEM1="pcpu"
declare chkNumber=0
declare pid=""

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
}

for i in $(ps -C java -o pid,$ITEM1)
do
        chkNumber=0
        let counter=counter%2
        if [ 0 -eq $counter ]; then
                isNumber $i
        else
                pid=$i
        fi

        if [ $chkNumber -gt 0 ]; then
                echo "pid is $pid, cpu used ${i}% by $PROG."
        fi

        let counter++
done

  運行效果:md5

[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.命令可用ci


  腳本中,會用到判斷命令可用,或者某個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


  腳

相關文章
相關標籤/搜索