shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介

for语句

条件成立执行指令

基本句式

for NUM in 1 2 3
for NUM in {1..3}
for NUM in `seq 1 3` 或 for NUM in `seq 1 2 10`
do
done

实验

[root@des mnt]# vim for.sh
###
for i in {1..10}
do
   echo $i
done

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第1张图片

[root@des mnt]# sh for.sh 

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第2张图片

for i in toy any tom
do
  echo $i
done
###输出1到10
[root@des mnt]# sh for.sh 

a=1
b=10
for i in `seq $a $b`
do
  echo $i
done
###输出1到10
[root@des mnt]# sh for.sh 

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第3张图片
shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第4张图片

for ((i=1;i<10;i+=2))
do
    echo $i
done
###每两个取一值,直到数字9
[root@des mnt]# sh for.sh

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第5张图片
shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第6张图片

for ((i=1;i<11;i++))
do

ping -c1 -w1 172.25.254.$i &> /dev/null     && echo yes || echo no

done
###检查172.25.254.1~172.25.254.10是否联通

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第7张图片
shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第8张图片

while语句

执行循环语句

基本句式

while 条件
do
done

实验

[root@des mnt]# vim while.sh
###
#!/bin/bash
while true
do
        read -p "Please input world: " WORLD
        echo $WORLD
done
#####until与while作用相反(until false=while true)
until false
do
        read -p "Please input world: " WORLD
        echo $WORLD
done

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第9张图片
shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第10张图片

[root@des mnt]# sh while.sh 
Please input world: 123
123
Please input world: echty
echty
Please input world: ^C
###不能自动停止

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第11张图片
shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第12张图片

if语句

多项判断条件,某项条件成立则可执行相应指令

基本句式

开始
if 	###第一项判断条件
do	###第一项判断条件成立时执行的动作
elif	###第二项判断条件
then	###第二项判断条件成立时执行的动作
结束
else	###判断条件都不成立时执行的动作
fi	###结尾

实验

[root@des mnt]# vim if.sh

if  [ "$1" = westos   ]  ### 当输入为westos时输出westos
then
        echo westos
elif [ "$1" = linux  ]   ### 当输入为linux时输出为linux
then
        echo linux
elif [ "$1" = hello  ]   ###当输入为hello时输出为hi
then
        echo hi
else
        echo error       ###否则输出为error
fi

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第13张图片

[root@des mnt]# sh if.sh 
[root@des mnt]# sh if.sh hello
[root@des mnt]# sh if.sh westos
[root@des mnt]# sh if.sh linux

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第14张图片
实验:利用脚本添加文件中已有的用户,并将另一文件中对应行字符设为密码

[root@des ~]# vim if.sh
[root@des ~]# vim userfile   ###指定用户名文件
[root@des ~]# vim passwd	 ###指定用户密码(与用户名文件中用户一对一)
if [ $# -lt 2 ]
then
        echo "Erroe:please input two files following script!!!"
elif [ ! -e $1  ]
then
        echo "Error:$1 is not exist!"
elif [ ! -e $2  ]
then
        echo "Error:$2 is not exist!"
else
        NUM=`awk 'BEGIN{N=0}{N++}END{print N}' userfile`
        for I in `seq 1 $NUM`
        do
                USERNAME=`sed -n ${I}P userfile`
                PASSWD=`sed -n ${I}P passwdfile`
                getent passwd $USERFILE &> /dev/null
                if [ "$?" = "0" ]
                then
                        echo $USERNAME is exist
                else
                        useradd $USERNAME
                        echo $PASSWD | passwd --stdin $USERNAME > /dev/null
                fi
        done
fi

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第15张图片
shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第16张图片
测试

[root@des ~]# sh if.sh 
[root@des ~]# sh if.sh user
[root@des ~]# sh if.sh user file
[root@des ~]# sh if.sh userfile file
[root@des ~]# sh if.sh userfile passwdfile

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第17张图片

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第18张图片

case语句

同if语句一样,为判断多项条件,某项条件成立则可执行相应指令,但case为横向执行,即指判断一次,速度更快

基本句式

case 变量 in
	linux|Linux|Linux)	###首位相符合的匹配条件
	echo westos		###匹配条件相和执行的动作
	;;			###分割符
	westos|WESTOS|Westos)	###次位相符合的匹配条件
	echo guo		###匹配次位条件相和执行的动作
	;;
	*)			###匹配条件不存在
	echo error		###不存在时的输出
esac				###结束

实验

[root@des mnt]# vim case.sh
case $1 in
        linux|LINUX|Linux)
        echo westos             
        ;;
        BAG|bag|Bag)
        echo 123
        ;;
        *)
        echo error              
esac

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第19张图片

测试

[root@des mnt]# sh case.sh 
[root@des mnt]# sh case.sh bag
[root@des mnt]# sh case.sh LINUX

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第20张图片
for语句与case语句
if 多次比较 判断条件
case 横向对比 点名

expect

自动应答命令用于交互式命令的自动执行

字符含义

spawn #expect中的监控程序,其运行后会监控命令提出的交互问题
send #发送问题给交互命令
"\r" #回车
exp_continue #标示问题不存在时继续回答下面的问题
expect eof #标示问题回答完毕退出expect环境
interact #标示问题回答完毕留在交互界面
set NAME [ index $argv n ] #定义变量

实验

安装export
[root@des mnt]# yum install expect

[root@des mnt]# vim ask.sh   		###设置需要回答的问题
[root@des mnt]# vim answer.exp  	###设置变量回答问题
[root@des mnt]# chmod +x answer.exp     ###给予执行条件
[root@des mnt]# ./answer.exp
[root@des mnt]# ./answer.exp guo 20 linux y

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第21张图片
ask.sh

read -p "What's your name: " NAME   ##显示问题What's your name,要求输入NAME
read -p "How old are: "  AGE
read -p "Which object you study: " OBJ
read -p "Are you happy: "       FEEL
echo $NAME is $AGE\'s old study $OBJ feel $FEEL
###指定输入变量

[root@des mnt]# sh ask.sh 
###单独执行

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第22张图片
answer.exp

#!/usr/bin/expect    		##指定执行为expect
set timeout 5			##5s不执行退出
set NAME [ lindex $argv 0 ]	##第一个变量在为搜索匹配到NAME的问题答案
set AGE [ lindex $argv 1 ]	##第二个变量在为搜索匹配到AGE的问题答案
set OBJ [ lindex $argv 2 ]
set FEEL [ lindex $argv 3 ]
spawn sh /mnt/ask.sh		##搜索问题的指定文件
expect {
        "name" { send "$NAME\r" ; exp_continue }   ##指定问题的回答方式,并继续
        "old" { send "$AGE\r" ; exp_continue }
        "object" { send "$OBJ\r" ; exp_continue }
        "happy" { send "$FEEL\r" }		   ##无继续执行指令
}
interact					   ##完成后依然留在交互界面

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第23张图片
shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第24张图片
实验二
链接172.25.254.{1…10}并报告其主机名

Auto_SSH()
{
/usr/bin/expect <<-EOF
spawn ssh root@$1 hostname
expect {
"yes/no" { send "yes\r" ; exp_continue }
"password" { send "westos\r" }
}
expect eof
EOF
}

for IP in {1..10}
do
	ping -c1 -w1 172.25.254.$IP &> /dev/null
	if [ "$?" = "0" ]
	then
	Auto_SSH 172.25.254.$IP | tail -n 1
	fi
done 

exit、break及continue

exit n 脚本退出,退出值为n
break 退出当前循化
continue 提前结束循环内部的命令,但不终止循环

实验

[root@des mnt]# vim wesd.sh
#!/bin/bash
for i in {1..10}
do
        if [ "$i" = "5" ]
        then
                echo lucky number
        fi 
        echo $i
done
[root@des mnt]# sh wesd.sh 

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第25张图片

[root@des mnt]# vim wesd.sh
#!/bin/bash
for i in {1..10}
do
        if [ "$i" = "5" ]
        then
                echo lucky number
                exit 0
        fi
        echo $i
done
echo end
[root@des mnt]# sh wesd.sh 

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第26张图片
在这里插入图片描述

#!/bin/bash
for i in {1..10}
do
        if [ "$i" = "5" ]
        then
                echo lucky number
                break
        fi
        echo $i
done
echo end

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第27张图片
shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第28张图片

#!/bin/bash
for i in {1..10}
do
        if [ "$i" = "5" ]
        then
                echo lucky number
                continue
        fi
                echo $i
done
echo end

shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第29张图片
shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介_第30张图片

运算

运算方式及运算符号

运算符号             意义
+,-               加法,减法
*,/,%            乘法,除法,取余
**                 幂运算
++,--             自增加,自减少
<,<=,>,>=          比较符号
=,+=,-=,*=,/=,%=   赋值运算

运算操作与运算命令 含义

(())                  用与整数运算
let                   用与整数运算,与(())类似
expr                  用于整数运算,功能相对较多
bc                    linux下的计算器,适合整数及小数运算
$[]            	      用户整数运算

你可能感兴趣的:(shell脚本之for条件语句、case点名机制、if语句、while循环语句及export、exit、break、continue以及基本运算符号简介)