Shell编程及自动化运维的实现

Shell条件测试:

1.数值比较[  整数1    操作符    整数2   ]

[  20  -gt  10  ]  大于

[   1  -lt     10 ]   小于

[1     -eq    1 ]  等于  

[1     -ne    5 ]  不等于

[20    -ge    5]  大于等于

[9      -le    10]  小于等于

测试语句:

  test     条件表达式

  [   条件表达式  ]

  [[   条件表达式  ]] 

输出字符串的长度:echo  ${#pass}

比较字符串长度的大小:

     aaa=123adf;  test  ${#aaa}   -ge   7;echo   $?     非零

     aaa=123adf; [  ${#aaa}   -ge   7  ];echo   $?      非零

     aaa=123adf;  [[  ${#aaa}   -ge   7 ]]  ;echo   $?      非零

测试用户输入的密码是否满足长度要求:

     Vim   1.sh

   #!/bin/bash

   read  -p   “请输入您的密码: ”   ps

   if  [  ${#ps}  -lt   7    ]

   then 

   echo  “您输入的密码太短了”

   else

   echo “您的密码可真长”

   fi

文字测试操作符(普通用户测试)

   -f  :文件操作符,存在则为真

   -d :存在并且是一个目录的时候则为真

   -w :存在并且这个目录或文件可写时为真

   -b :是否是块文件(/dev/sda就是块文件)

   -z :检验长度是否为0,为0为真

-n :检验长度是否不为零,不为0时候为真

id-u  root用户为0

id-u 普通用户为1000开外

数值比较:num=$(id-u)

if  [  $num   -eq   0  ]

then

echo  “adminuser”

else

echo”普通用户”

fi

需求:请用户输入备份的路径,如果存在提示已存在,可以备份,如果不存在,提示目录不存在,已创建。

  #vim  path.sh

  #!/usr/bin/bash

  read  -p   “请输入需要备份的目录: ”   dir1

  if  [  -d  $dir   ]

then  

echo  “$dir  存在可以备份”

else

echo  “$dir  不存在无法备份”

 mkdir  $dir

 echo  “$dir 已创建”

fi

字符串比较

   需求:邀请用户确认,yes升级装备,no不升级装备

#vim  select.sh

read  -p  “您确认要升级这件装备吗?[yes/no]”  select

if  [“select”=”yes”]

then

echo  “装备开始升级”

else 

echo“感谢您,欢迎下次光临”

fi

 

 

字符串长度不超7,且包含特殊字符和字母

[ ${#pass}  -gt  7 ] &&  [[   $pass   =~  [a-z]  ]]  && [[  $pass  =~  [A-Z]   ]]

&&  [[  $pass  =~  [@_!]  ]]

包含大写和小写字母

[[  $pass   =~   [a-z]    &&  $pass  =~  [A-Z]   ]]

长度大于7切小于10

[ ${#pass}  -gt  7     -a    [${#pass}  -lt  10    ]]

 

 

 

双分支结构:

   检查uid和gid  是否相同相同输出yes否则no

注:改变gid的命令usermod   -g    gid   用户

Vim  userid.sh

#!/usr/bin/bash

read  -p  "请输入你要测试的用户: "  name

aa=`id  -u   $name`

bb=`id  -g  $name`

if  [ $aa -eq $bb ]

then

echo  "yes"

else

echo  "no"

fi

 一定要注意使用优先执行,判断直接条件:`id  -u  $name` 是否等于`id  -g $name`

多分支结构

编写脚本,取出系统时间的小时,对数字进行判断

      6--10  this is morning

      11-13  this is noon

      14-18  this is afternoon

      其他   this is night

   #!/bin/bash

#hour=`date +%H`

if [ $hour -ge 6 -a $hour -le 10 ];then

         echo "This is morning"

elif [ $hour -ge 11 -a $hour -le 13 ];then

         echo "This is noon"

elif [ $hour -ge 14 -a $hour -le 18 ];then

         echo "This is afternoon"

else

         echo "This is night"

fi

嵌套结构

本次实验需求:

  查看某个用户名,若存在的,询问是否改密码,回答yes,则符合密码的要求的时候就会更改密码,不符合密码则退出。若回答是no则退出。

  若不存在用户,提示再次输入密码。符合密码的要求则创用户,赋予密码,

不符合密码的要求则退出 。

    #vim  useradd.sh

   #!/usr/bin/bash

read  -p   "请输入用户名:  "    user

if   id   $user   &> /dev/null

  then

        echo  "$user  已存在"

         read  -p  "你想更改密码吗:[yes/no] "   select

         if  [ "$select"="yes" ]

            then

               read      -p  "你想要更改的密码: "  ps

                     if   [  ${#ps}  -gt 7  ]

                     then

                        echo  "您的密码过长"

                        exit   1

                       else

                        echo  "$ps"  |  passwd   --stdin  $user   &>  /dev/null

                        echo  "更改密码完成"

                    fi

              else

                 exit    2

           fi

 

   else

        read  -p   "请输入$user用户您想设置的密码:  "   pass

        if   [  ${#pass}  -gt 7  ]

             then

             echo  "您的密码过长"

             else

             useradd   $user

             echo  "$pass"  |  passwd   --stdin  $user   &>  /dev/null

             echo   "$user  已创建   ,$user的密码是$pass"

         fi

fi

 

 

 

case语法结构(字符串比较)

case 变量 in

模式1)

命令序列1

;;

模式2)

命令序列2

;;

模式3)

命令序列3

;;

*)

无匹配后命令序列

esac

示例:

不同情况的select问题解决

#!/usr/bin/bash

  read  -p  “请您输入待删除的用户名: ”  user

  read  -p “确认吗?[yes/no]  ”  select

 case  $select  in

 Y|y|yes|YES|Yes)

 userdel   -r     $user

echo  “$user   已经删除”

;;

*)

echo  “谢谢您,再见”

;;

esac

案例一:简单的跳板服务器

案例二:系统管理工具箱

 


版权声明:本文为qq_48492049原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。