shell语句

一、for语句

 1.for语句格式

  for i in {1..10}  | `seq 1 3 10` (步距为3,即每个3执行命令)

  do

     echo $i

     sleep 1    ##执行命令后休眠时间为1s

  done

  

 2.编写脚本check_host检查1-10的主机是否可达

[root@foundation77 ost]# vim check_host2.sh

#!/bin/bash

for IP in {1..10}

do

  ping -c1 -w1 172.25.254.$IP &> /dev/null &&  echo 172.25.254.$IP is up

done


 

 3.编写脚本create_user自动建立userfile的用户

[root@localhost mnt]# vim create_user2.sh

#!/bin/bash

for i in `cat $1`

do

useradd $i

done

[root@foundation77 ost]# touch userfile

[root@foundation77 ost]# vim userfile

[root@foundation77 ost]# cat userfile

user7

[root@foundation77 ost]# su - user7

[user7@foundation77 ~]$

 

 4.编写build_user.sh脚本将/ost/userfile与/ost/passwdfile一一对应,建立

[root@foundation77 ost]# vim userfile

user1

user2

user3

[root@foundation77 ost]# vim passfile

123

123

123

[root@foundation77 ost]# vim build_user.sh

[root@foundation77 ost]# sh build_user.sh

  1 #!/bin/bash

  2 n=`awk 'BEGIN{N=0}{N++}END{print N}' /ost/userfile`

  3 for Num in `seq 1 "$n"`

  4 do

  5         User_name=`sed -n ""$Num"p" /ost/userfile`

  6         Passwd=`sed -n ""$Num"p" /ost/passfile`

  7         useradd $User_name

  8         echo $Passwd | passwd --stdin $User_name

  9 done

 

 5.编写脚本time.sh实现10s倒计时

[root@foundation77 ost]# vim time.sh

[root@foundation77 ost]# sh time.sh

  1 #!/bin/bash

  2 for Second in {10..1}

  3 do

  4         echo  -n "after $Second's is end "

  5         echo -ne "\r\r"

  6         sleep 1

  7 done




 

二、while语句

 1.编写脚本Use.sh,当根分区内存使用量超过80%时,每隔10s生成警告日志

  1 #!/bin/bash

  2 Use_Memory=`df | awk -F " " '/\/$/{print $5}' | cut -d "%" -f 1`

  3 while [ $Use_Memory -gt "80" ]

  4 do

  5         echo "Permissive: Ues_Memory of root directory overflows 80%" >> /var/log/messages

  6         sleep 10

  7 done

 或者

  1 #!/bin/bash

  2 while true

  3 do

  4         Use_Memory=`df | awk -F " " '/\/$/{print $5}' | cut -d "%" -f 1`

  5         [ $Use_Memory -gt "80" ] && {

  6                 echo "Permissive: Ues_Memory of root directory overflows 80%    " >> /var/log/messages

  7         }

  8         sleep 10

  9 done

 

三、if语句

 1.编写脚本User_create.sh,当文件个数不符合要求或者文件不存在时报错

 复杂型:

  1 #!/bin/bash

  2 if

  3         [ $# -eq 2 ]

  4 then

  5         [ -e $1 ] && {

  6                 [ -e $2 ] && {

  7                 n=`awk 'BEGIN{N=0}{N++}END{print N}' $1`

  8                 for Num in `seq 1 "$n"`

  9                 do

 10                         User_name=`sed -n ""$Num"p" $1`

 11                         Passwd=`sed -n ""$Num"p" $2`

 12                         useradd $User_name

 13                         echo $Passwd | passwd --stdin $User_name

 14                 done }

 15         } || echo Error!!

 16 else

 17         echo Error!!

 18 fi

 简单型

 19 if      [ $# -lt 2]

 20 then    

 21         echo Error:please input a user file and a passwd file !!

 22 elif    [ ! -e $1 ]     

 23 then    

 24         echo Error:$1 is not exist!!

 25 elif    [ ! -e $2 ]

 26 then

 27         echo Error:$2 is not exist!!    

 28 else

 29         n=`awk 'BEGIN{N=0}{N++}END{print N}' $1`

 30         for Num in `seq 1 "$n"`

 31         do

 32                 User_name=`sed -n ""$Num"p" $1`

 33                 Passwd=`sed -n ""$Num"p" $2`

 34                 useradd $User_name

 35                 echo $Passwd | passwd --stdin $User_name

 36         done

 37 fi

 2.编写脚本test.sh,当输入cat时,输出dog;输入dog时,输出cat;其他则报错

  1 #!/bin/bash

  2 if [ "$1" = cat ]

  3 then

  4         echo dog

  5 elif [ "$1" = dog ]

  6 then

  7         echo cat

  8 else

  9         echo Error:please input cat or dog after script!

 10 fi

四、case语句  

  case语句横向同时比较,效率优于if语句

 1.编写脚本service_ctrl.sh,当输入命令时,对httpd服务做不同操作

  1 #!/bin/bash

  2 case $1 in

  3         start)

  4         systemctl start httpd

  5         ;;

  6         port)

  7         netstat -antuple | grep httpd

  8         ;;

  9         stop)

 10         systemctl stop httpd

 11         ;;

 12         *)

 13         echo Error:$1 is not found!

 14 esac

五、expect语句

  

  ####注意:需要安装expect服务#####

 expect:自动应答脚本,具备自己的运行环境;针对某一脚本,自动输出结果

 1.编写脚本passwd.exp,自动修改root用户密码

  查看相关命令的脚本:

[root@localhost mnt]# which passwd

/bin/passwd

[root@localhost mnt]# which expect

/bin/expect

  编写脚本:

[root@localhost mnt]# cat passwd.exp

#!/bin/expect

spawn /bin/passwd     ##监控脚本

expect "New"

send "123\r"

expect "Retype"

send "123\r"

expect eof     

 2.编写脚本ssh.exp,自动链接指定主机

  1 #!/bin/expect

  2 set IP [ lindex $argv 0 ]

  3 set PASSWD [ lindex $argv 1 ]

  4 spawn ssh root@$IP

  5 expect {

  6         "yes/no" { send "yes\r"; exp_continue}

  7         "password" { send "$PASSWD\r" }

  8 }

  9 interact

 10 #expect eof

 实验链接主机:

[root@localhost mnt]# expect ssh.exp 172.25.254.10 westos

spawn ssh [email protected]

[email protected]'s password:

Last login: Wed May 16 14:36:07 2018 from 172.25.254.200

 3.编写脚本check_host.sh,输出1-10网络通的主机名

六、脚本语句控制器

  exit

  break

  continue

七、倒计时

  编写脚本1:10倒计时

猜你喜欢

转载自blog.csdn.net/period000/article/details/80768450