脚本中的语句控制句

脚本中的语句控制句

1.语句控制句

exit n    脚本退出,退出值为n

break     退出当前循环

continue  提前结束循环内部的命令,但不终止循环

下面我们用实验来看看他们的作用效果:

写一个脚本,显示1-10,但不显示4

方法一:break实现

1 vim  test2.sh #不显示4,从1-10
#!/bin/bash
for NUM in {1..10}
do
  while
        [ ! "$NUM" -eq "4" ]
  do
  echo $NUM
  break
  done
done
2 sh test2.sh

方法二:用continue实现:

1 vim test3.sh
continue 4 #每次遇到4,自动跳过
#!/bin/bash
for  NUM in {1..10}
do
     while
     [ "$NUM" = "4" ]
     do
     continue 4
     done
     echo $NUM
done
sh test3.sh


2 SHELL中常用的运算命令:
2.1 >运算操作和运算命令   含义
    (())                                 用于整数运算
    let                                   用于整数运算,与(())类似
    expr                                用于整数运算,功能相对较多
     bc                                  linux下的运算器,时和整数及小数运算
    $[ ]                                  用于整数运算
2.2>运算方式及运算符号
运算符号                     意义(*标示常用)
    +,-                           加法,减法
    *,/,%                     乘法,除法,取余
    **                              幂运算
    ++,--                       自增加,自减少
    <,<=,>,>=                  比较符号
=,+=,-=,*=,/=,%=       赋值运算,例如a+=1相当于a=a+1

   实验操作:

 1  ((a=1+1)) #计算1+1的值,赋给a
 2  echo $a   
 3  a=1+1     #不计算,把“1+1”整体赋给a
 4  echo $a   
 5  let a=1+1 #计算1+1的值,赋给a
 6  echo $a
 7  echo `expr 1+1` #1+1
 8  echo `expr 1 + 1` #计算1+1的值
 9  bc <<EOF  #计算器
       1+1
       2+2
       EOF
 10  echo $[2**3] #2的3次幂运算
 11  echo $[2*3]  #2*3
 12  echo $[a+=2] #a=a+2,计算a+2的值,并赋给a
 13  echo $a
 14  echo $[a+=2] #a=a+2,计算a+2的值,并赋给a
 15  echo $[a-=2] #a=a-2,计算a-2的值,并赋给a
 16  echo $[a>=2] #比较a和2的值,a大于等于2,输出为1
 17  echo $[a<=2] #比较a和2的值,a大于2,输出为0


写一个计算器脚本,输入什么,计算出值:
1  vim calculator.sh
方法一:
#!/bin/bash
echo $(($1$2$3))
方法二:
#!/bin/bash
echo $[$1$2$3]
方法三:
#!/bin/bash
bc <<EOF
$1$2$3
EOF
2 sh calculator.sh 1*2 测试
 


十秒倒计时:
vim time1.sh
#!/bin/bash
for ((Time_Num=10;Time_Num>=0;Time_Num--))
do
echo -n  "$Time_Num "
echo -ne "\r\r"
sleep 1
done
一分十秒的倒计时:

方法一:逻辑关系:

1 vim time2.sh #逻辑关系
#!/bin/bash
for ((Minute=1;Minute>=0;Minute--))
do
    Second=10
    [ "$Minute" -eq "1" ] || Second=60
    for ((Time=$Second;Time>=0;Time--))
    do
    echo -n "$Minute:$Time "
    echo -ne "\r\r"
    sleep 1
    done

done
方法二:计算取余:
1 vim time3.sh #计算取余
#!/bin/bash
read -p "Please input minute follow the script: "  M
read -p "Please input second follow the script: "  S
I=$[M*60+S]
for ((P=$I;P>=0;P--))
do
    A=$[$P/60]
    B=$[$P%60]
    echo -ne "\r$A:$B \r"
    sleep 1
done

给60-64主机上面建用户
1 vim useradd_create.sh
#!/bin/bash
##########Rule Check###########
if
[ "$#" -ne "2" ]
then
   echo "ERROR1:Please input userfile and passfile follow the script!!"
   exit 1
elif
[ ! -e  "$1" ]
then
   echo "ERROR2:Sorry, $1 is not exist !!"
   exit 1
elif
[ ! -e  "$2" ]
then
   echo "ERROR3:Sorry, $2 is not exist !!"
   exit 1
elif
USERFILE_LINE=`awk 'BEGIN{N=0}{N++}END{print N}' $1`
PASSFILE_LINE=`awk 'BEGIN{N=0}{N++}END{print N}' $2`
[  ! "$USERFILE_LINE" -eq "$PASSFILE_LINE" ]
then
   echo "ERROR4:$1's line is different from $2's line !!"
   exit 1
fi 
##############Auto_Connect(执行动作的前提条件)###########
Auto_Connect()
{
/usr/bin/expect <<EOF | grep -E "authenticity|ESDSA|connecting|Warning|spawn|password" -v
set timeout 5
spawn ssh root@172.25.254.$IP "$1"  #此处的$1时Auto_Connect之后的第一串字符,即连接上主机后要执行的动作,并不是脚本的第一串字符,即执行动作模块中的Auto_Connect "echo $PASSWORD |passwd --stdin $USERNAME"

expect {
       "yes/no" { send "yes\r";exp_continue }
       "password:" { send "westos\r"}
       }
expect eof
EOF
}
##############执行动作#############for IP in {60..64}
do
    ping -c1 -w1 172.25.254.$IP &>/dev/null && {
    Max_Line=`awk 'BEGIN{N=0}{N++}END{print N}' $1`
    for Line_Num in `seq 1 $Max_Line`
    do
        USERNAME=`sed -n ${Line_Num}p $1`
        PASSWORD=`sed -n ${Line_Num}p $2`
        User_Check=`Auto_Connect "useradd $USERNAME"`
        [ -n "$User_Check" ]&&{
        echo $User_Check
        }||{
        Auto_Connect "echo $PASSWORD |passwd --stdin $USERNAME"
        }
     done
}||  echo 172.25.254.$IP is down
done

  测试:

  1  sh useradd_create.sh
  2  sh useradd_create.sh userfile passfile
  3  sh useradd_create.sh userfile passfile
  4  vim userfile
  5  vim passfile
  6  sh useradd_create.sh userfile passfile

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值