欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-24 19:40:53
...

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运算

执行结果:

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

示例:

编辑脚本: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.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运算

示例:

检测系统中的/设备使用量超过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运算

执行结果:查看系统日志

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

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运算

执行结果:

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

示例:

编写脚本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运算

执行结果:

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

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运算

执行结果:

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

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运算

执行结果:

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

示例2:

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

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

执行结果:

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

示例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 <<EOF
set timeout 2
spawn ssh aaa@qq.com172.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运算

执行结果:

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

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运算

执行结果:

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

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运算

执行结果: 陷入死循环

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

三.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运算

执行结果:

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

示例:

四则云算法:
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运算

执行结果:

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