shell的while循环&函数

while循环

【while】
#!/bin/bash
while :
do
        load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d. -f1`
        if [ $load -gt 10 ];then
            top|mail -s "load is high: $load" [email protected]
        fi
        sleep 30
done

1、while :  【while后带冒号表示始终为真】
2、w|head -1 【取系统性能值得第一行】
3、awk -F 'load average: ' '{print $2}'|cut -d. -f1
【以load average:   作为分隔符,输出第二段值】
【cut -d. -f1 表示以点.  作为分隔符,取-f1第一段值】

cut用法:cut -d "分隔符" -f2 文件
-c   以字符为单位进行分割
-d   分隔符,后面用引号引住分隔符
-f   与-d 连用,指定显示那个区域

cut -d[:] -f    列数,列数,...
cut -d: -f 2    以冒号分割取第二列
cut -d: -f 2,3  以冒号分割取第2列,第3列
cut -d: -f 2-   以冒号分割取第2列到最后

#!/bin/bash
#循环判断输入的是否为纯数字,直到输入的为纯数字,继续判断奇偶,若输入为空提示继续输入
while true
do
        read -p "请输入一个数字:" num
        if [ ! -n "$num" ];then
             echo "输入值为空"
             continue
       fi           
       a=`echo $num|grep -Ec [^0-9]`
        if [ "$a" -eq 1 ];then
              echo "输入的为非纯数字,请输入纯数字"
          continue
              #read -p "请输入一个数字:" num
         fi
         if [ "$a" -eq 0 ];then
               b=$(($num%2))
                      if [ "$b" -eq 0 ];then
                            echo "$num 是偶数"
                        else
                            echo "$num 是奇数"
                      fi
          exit
          fi
done


【continue】关键字:表示循环体下面的语句不再执行,但是循环还是要的,从头再开始执行一遍循环
【break】关键字:退出本次的循环体,循环体外的仍会执行到
【exit】关键字:不仅退出循环体,而且还退出本次执行的脚本

untile循环

until 条件为假时,执行循环语句
语法:
until 条件
do
   循环体
done

举例1、
#!/bin/bash
n=1
until [ $n -gt 5 ]
do
  echo $n
  n=`expr $n + 1`
done

【函数】

定义函数sum
格式1:
sum(){ 
   command 
}   
sum parm1 parm2...【后面可接参数1,参数2,...】
格式2:
function sum(){
    command
}

举例1:
#!/bin/bash
sum(){
   s=$[$1+$2]
   echo $s
}
sum $1 $2

举例2:
获取网卡的IP地址
#!/bin/bash
ip(){
  ifconfig | grep -A1 "$1"|tail -1|awk '{print $2}'
}
read -p "请输入你的网卡名" name
myip=`ip $name`
echo "$name address is $myip"

举例3:
#!/bin/bash
CURR_HOME(){
 app_home=$(dirname $0)
 app_path=$(readlink -f $app_home)
 echo $app_path
}
APP_HOME=$CURR_HOME()
echo $APP_HOME

注:这里脚本里的函数CURR_HOME()的内容 echo $app_path 即可看作是该函数的返回值

你可能感兴趣的:(shell的while循环&函数)