shell判断、循环、控制语句与函数应用

条件语句

IF  语句

格式1:

if  [     ];  then

命令序列

else

命令序列

fi


格式2:

if   [    ];    then

命令序列

elif   条件;   then

命令序列

elif   条件;   then

命令序列

else

命令序列

fi


case语句

格式1:

case     $变量名称    in

模式1)

       命令序列

        ;;

模式2)

        命令序列

         ;;

*)

esac


格式二:

case  $变量名称  in

模式1|模式2)

               命令序列

                 ;;

模式3|模式4)

                 命令序列

                   ;;

模式5|模式6)

                   命令序列

                    ;;

*)

esac


DATE = $(date + %a)

TIME  = $(date +%Y%m%d)

case   $DATE   in

                Wed|Fri)

     tar  -czf      /usr/src/${TIME}_log_tar.gz    /var/log/          &>   /dev/null

     ;;

                     *)

   echo   "Today  neither  wed   or  fri  "   

     esac


  

循环语句

循环语句当中有for、while、until、select等语句



For语句

格式1:

for   变量    in  值1    值2  ....  值N    

do

命令序列

done


格式二:

for    (( j=1;j<10;j++  ))

do

命令序列

done



Domain   =  gmail.com

for     MAIL_U   in  tom   jerry  smith

do

mail     -s   "Log"   $MAIL_U@$Domain    <  /var/log/message 

done



While语句

whhile    [条件]

do

命令序列

done


输出文件的每一行:

while   rad   -r  line

do

echo   $line

done   < file


批量添加20个用户,用户名称为userN,   N为1至20的数字

U_NUM=1

while   [ $U_NUM -le  20  ]

do

useradd   user${U_NUM}

U_NUM = $((U_NUM+1))

done


   

until语句

until   [条件]

do

 命令序列

done



批量删除用户

U_NUM=20

until    [ $U_NUM -eq  0 ]

do

userdel   user${U_NUM}

U_NUM  =  $((U_NUM-1))

done


Select语句

Select语句可以用来生成菜单项目,select循环与for循环格式相同


用select生成询问籍贯的提问菜单,并通过echo回显用户的选择项

echo   “where  are   you  from?”

select   var  in   "Beijing"   "Shanghai"  "New York"  "Chongqing"

do

break

done

echo   "You  are  from  $var "




控制语句

控制语句有shift、continue、break、exit

shell脚本默认会按顺序依次执行脚本中的命令,通过控制语句可以认为控制脚本的执行顺序与流程


shift控制

将位置参数左移一位,也就是执行一次shift命令后,$2将变为$1,依次类推,这样可以通过$1调用所有的命令参数

[root@centos6 ~]  cat  shift.sh

for  i   in   $@

do

echo  $1

shift

done


[root@centos6 ~]  bash  shift.sh  hello  the  world

hello

the

world


continue用来在for、while、until循环中使当前循环中断,从而进入下一次循环体

break则被用来结束整个for、while、until循环语句的执行

exit可以用来结束脚本的运行

sleep  5   让脚本暂停5秒钟


for   IP_SUFFIX  in   {1...254}

do

case   $IP_SUFFIX  in

        10)

               continue

                 ;;

         15)

                 break 

                 esac

 echo  ${IP_SUFFIX}

done

sleep 5

exit

echo   "The   would't   be   printed  content  "


shell函数应用

把可能使用多次代码或语句写错函数,可以通过函数名称更高地重复利用它们

脚本比较复杂时,也可以将脚本划分为多个模块以简化脚本

函数需要先定义,后通过调用函数名称即可使用


语法格式1:

name ()  {

命令序列

}


语法格式2:

function  name  {

命令序列

}


[root@centos6 ~] cat   test.sh

#!/bin/bash

HINT() {

read  -p   "Press Enter to continue:"

}

CPU_INFO ( )  {

echo

echo   -e  "\033[4;3]m Print  the  CPU  info:\033[0m"

cat  /proc/cpuinfo  | awk 'BEGIN  {FS=":"}   /model name/   {print  "CPU Model:"$2 }'

cat  /proc/cpuinfo   |  awk  'BEGIN  {FS=":"}  /cpu MHz/   {print  "CPU Speed:"  $2"MHz"  }'

grep  -Eq   'svm|vmx'       /proc/cpuinfo  &&  echo  "Virtualization: Support"  ||  echo  "Virtualzation:No  support"

echo

}

Load_INFO()   {

echo

echo  -e  "\033[4;31mPrint  the  system  Load:\033[0m"

uptime  |  awk   'BEGIN {FS=":"}  {print  $5}' | awk    ' BEGIN {FS=","}  {print   "Last  1  minutes  system  load:"$1"\n"  "Last 5 minutes  system load:"$2"\n"  "Last  15  minutes  system  load:"$3 }  ' 

echo

}

MEM_INFO()  {

echo

echo  -e   "\033[4;31mPrint the Memory and Swap info:\033[0m"

free  |  grep   buffers/cashe  |  awk  ' {print   "Mem free:"$4"  bytes" } 

free  |  grep   Swap  | awk   ' { print  "Swap  free:"$4"  Bytes"   }        '

echo

}

DISK_INFO()  {

echo

echo  -e  "\033[4;31mPrint system disk space usage:\033[0m "

df  -h

echo

}

while   true

do

clear

echo   "-------------------------------------------------------------"

echo   "1.  Display  CPU  info:"

echo    "2. Display    system   load:"

echo    "3.  Display   Mem  and  swap   info:"

echo    "4.  Display    filesystem   mount  info:"

echo     "5.  Exit  Script:"

read   -p   "Please   select  an  iterm(1-4):"  U_SELECT

case   $U_SELECT   in

             1)

CPU_INFO

HINT

;;

             2)

LOAD_INFO

HINT

;;

             3)

MEM_INFO

HINT

;;

            4)

DISK_INFO

HINT

;;

           5)

exit

;;

          *)

read   -p   "Please  Select  1-4,Press  Enter  to  continue:"

esac

done


检查密码,如果用户三次输入密码均错误,则退出脚本

[root@centos6 ~]   cat  test.sh

#!/bin/bash

#Check   User  password,set  the  number  can  be retrying

NUM=3                                          #密码最多尝试次数

PASSWD=Jacob                         #初始密码

SUM=0                                         #计数器

WHILE  true

do

read  -p   "Please  input   your  password:"   pass        #读取用户输入

SUM=$((SUM+1))                                                              #计数器加1

if   [ $pass == $PASSWD ]  ; then                                   #判断密码是否正确

       echo  "Your  Are  Right, OK"

        exit

elif   [$SUM  -lt  3 ] ; then        

        continue

else

         exit

fi

done






















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值