linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算

shell 中常用的控制语句及脚本运行控制

一.shell 中常用的控制语句

for       语句
while     语句
if        语句
case      语句
expect    语句
exit      退出
break     退出循环 
continue  退出当前循环

1.for语句:

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

示例:

编辑脚本10秒倒计时:
vim   time——end.sh     编辑脚本
内容:
#!/bin/bash
for Time in  {10..1}          #条件
do
        echo -n "after $Time  is end!"
        echo -ne "\r\r"       #覆盖上次输出结果
        sleep 2               #停留2秒
done

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第1张图片

执行结果:

这里写图片描述

示例:

编辑脚本:create_user.sh    
要求:
1.自动建立userfile文件中的用户
2.建立passwd文件中的用户密码,和userfile中的用户一一对应。
#!/bin/bash
Min_Num=`awk 'BEGIN{N=0}{N++}END{print N}' userfile`   #循环次数
for NUM in `seq 1 "$Min_Num"`
do
   User_name=`sed -n ""$NUM"P" userfile`      #文件用户
   Passwd=`sed -n ""$NUM"p" passwdfile`       #密码文件
   useradd $User_name                         #建立文件用户
   echo $Passwd | passwd --stdin $User_name &>/dev/null
done
cat /etc/passwd | tail -n 3                   #查看后三行

执行结果:

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第2张图片

2.while 语句:

while   语句:
while       #条件
do
done

示例:while循环

while  语句循环:
#!/bin/bash
while true      #如果为真执行
do
        read -p "please input a word: " WORD    #输入一个字符
        echo $WORD
        [ "$WORD" = "exit" ] && {         #判断当输入的字符是exit
                echo bye!                 #输出bye!
                break                     #跳出循环
        }
done                                      #跳出循环后执行
echo hello word                           #输出hello word

执行结果:

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第3张图片

示例:

检测系统中的/设备使用量超过30%以邮件形式发送给root用户。
vim Disk.sh     编辑脚本
内容:
#!/bin/bash
Disk_Value=`df | awk -F " " '/\/$/{print $5}' |awk -F "%" '{print $1}'`
  #变量,检测系统/使用量
while [ $Disk_Value  -ge 30 ]    #使用量和30进行比较,为真执行
do
        echo warning:disk will full!! >> /var/log/messages   #发邮件
        sleep  10
done

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第4张图片

执行结果:查看系统日志

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第5张图片

3.if语句:

if语句:
if         #如果...
then       #则...
elif       #又如果...
then       #则...
。。。
else       #否则...
fi

示例:

if语句:
用if语句编写脚本:vim  create_user.sh创建用户
#!/bin/bash
if [ $# -lt 2 ]      #脚本后的所有字符小于2
then                 #则输出
        echo Error:please give me userfile and passwdfile!
elif [ ! -e $1 ]     #判定$1文件是否存在
then                 #则输出
        echo Error:$1 is not exist!
elif [ ! -e $2 ]     #判定$2文件是否存在
then                 #则输出
        echo Error:$2 is not reist!
else                 #否则执行
        Min_Num=`awk 'BEGIN{N=0}{N++}END{print N}' userfile`
        for NUM in `seq 1 "$Min_Num"`
        do
                User_name=`sed -n ""$NUM"P" userfile`
                Passwd=`sed -n ""$NUM"p" passwdfile`
                useradd $User_name
                echo $Passwd | passwd --stdin $User_name &>/dev/null
        done
fi

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第6张图片

执行结果:

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第7张图片

示例:

编写脚本test.sh,当输入cat是输出dog;
输入dog时;输出cat;其他时报错。
#!/bin/bash
if [ "$1" = cat ]
then
        echo dog
elif [ "$1" = dog ]
then
        echo cat
else
        echo Error!
fi

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第8张图片

执行结果:

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第9张图片

4. case 语句:

case语句:横向同时比较,效率优于if语句
word1 )
action1
;;
word2)
action2
;;
........
*)
action_last
esac

示例:

vim http_service.sh      编辑脚本
内容:
#!/bin/bash
[ -z $1 ] && {          #脚本后为空时报错
        echo Error:please input a commond after script!
        exit 1
}
case $1 in              #脚本后字符为start时执行
        start)
        systemctl start httpd
        ;;
        port)           #脚本后字符为port时执行
        netstat -antuple | grep httpd
        ;;
        enable)         #脚本后字符为ebable时执行
        systemctl enable httpd
        ;;
        *)
        echo Error:$1 is not found!
esac
systemctl restart httpd

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第10张图片

执行结果:

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第11张图片

5.expect语句:

expect语句需要安装expect服务

expect:自动应答脚本,具备自己运行的环境;针对某一脚本自动输出结果。
查看相关命令的脚本:
[root@localhost mnt]# which passwd
/usr/bin/passwd
[root@localhost mnt]# which expect
/usr/bin/expect
[root@localhost mnt]#

示例1:

1.vim passwd.exp   编辑脚本自动修改root用户密码
内容:
#!/bin/expect
spawn passwd
expect "New"
send "123\r"
expect "Retype"
send "123\r"
expect eof

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第12张图片

执行结果:

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第13张图片

示例2:

2.vim   ssh.exp  编辑脚本,自动链接指定主机并停在当前位置。
内容:
#!/bin/expect
set IP [ lindex $argv 0]     #脚本后的第一串字符
set PASSWD [ lindex $argv 1] #脚本后的第二串字符
spawn ssh root@$IP
expect {
        "yes/no" { send "yes\r";exp_continue }
        "password" { send "$PASSWD\r" }
}
interact

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第14张图片

执行结果:

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第15张图片

示例3:

3.vim check_hostname.sh  编辑脚本,输出1-5网络通的主机名
内容:
#!/bin/bash
for IP in {1..5}
do
        ping -c1 -w1 172.25.254.$IP &>/dev/null && {
/bin/expect <set timeout 2
spawn ssh root@172.25.254.$IP hostname
expect {
        "yes/no" { send "yes\r";exp_continue }
        "password" { send "westos\r" }
}
expect eof
EOF
}
done

二.shell脚本运行控制

1.exit 退出脚本,可给出退出值

1.vim exit.sh      编辑脚本
内容:
#!/bin/bash
for i in {1..10}
do
        echo $i
        while [ $i = 5 ]    #当$i等于5时
        do
                echo $i hello
                exit
        done
done

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第16张图片

执行结果:

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第17张图片

2.break:退出当前循环

2.vim  exit.sh    编辑脚本
内容:
#!/bin/bash
for i in {1..10}
do
        echo $i
        while [ $i = 5 ]    #当$i等于5时
        do
                echo $i hello
#               exit
                break      #退出当前的while循环
#               continue
        done
done 

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第18张图片

执行结果:

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第19张图片

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

3.vim  exit.sh    编辑脚本
内容:
#!/bin/bash
for i in {1..10}
do
        echo $i
        while [ $i = 5 ]    #当$i等于5时
        do
                echo $i hello
#               exit
#               break
                continue   #提前结束循环内部的命令,但不终止该循环
        done
done

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第20张图片

执行结果: 陷入死循环

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第21张图片

三.shell运算

脚本示例1.: (())运算赋值

比较法:
vim  time.sh    编辑脚本,实现130秒倒计时
内容:
#!/bin/bash
M_time=1
S_time=10
for ((;S_time>=0;S_time--))
do
        [ "$S_time" -eq "0" -a "$M_time" -eq "0" ] && exit 0
        while [ "$S_time" -eq "0" -a "$M_time" -ge "0" ]
        do
                echo -n "After $M_time:$S_time is end!"
                echo -ne "\r\r"
                ((M_time--))
                S_time=59
        done
        echo -n "After $M_time:$S_time is end!"
        echo -ne "\r\r"
        sleep 1
done

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第22张图片

执行结果:

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第23张图片

示例:

四则云算法:
vim time_运算.sh      编辑脚本,130秒倒计时。
内容:
#!/bin/bash
M_time=$1
S_tiem=$2
let TIME=(M_time*60)+S_tiem
for ((;TIME>=0;TIME--))
do
        MIN=$[ $TIME/60 ]
        SEC=$[ $TIME%60 ]
        echo -n "After $MIN:$SEC in end!"
        echo -ne "\r\r"
        sleep 1
done

linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算_第24张图片

执行结果:

这里写图片描述

你可能感兴趣的:(linux系统中的shell中的常用语句 || shell脚本运行控制 || shell运算)