shell中for、while循环语句和case分支语句

5 篇文章 0 订阅


一、使用for循环语句


提示:以下是本篇文章正文内容,下面案例可供参考

1.for语句的结构

使用for循环语句时,需要指定一个变量及可能的取值列表,针对每个不同1的取值重复执行相同的命令序列,直到变量值用完退出循环。在这里“取值列表”称为for语句的执行条件,其中包括多个属性相同的对象,需要预先指定(如通讯录、IP黑名单)。

for 变量名 in 取值列表
do
	命令序列
done

在这里插入图片描述

2.for语句应用示例

vim /root/users.txt
chenye
dengchao
zhangjie
[root@dns1 ~]# vim usddfor.sh
#!/bin/bash
ULIST=$(cat /root/users.txt)
for UNAME in $ULIST
do
        useradd $UNAME
        echo "123456" | passwd --stdin $UNAME &>/dev/null
done
[root@dns1 ~]# chmod +x usddfor.sh
[root@dns1 ~]#./usddfor.sh
[root@dns1 ~]# tail -3 /etc/passwd
chenye:x:1005:1005::/home/chenye:/bin/bash
dengchao:x:1006:1006::/home/dengchao:/bin/bash
zhangjie:x:1007:1007::/home/zhangjie:/bin/bash

如果需要删除uaddfor.sh脚本所添加的用户,只需要参考上述代码,将for循环体中添加的命令序列改为删除用户即可。

下列代码可供参考

[root@dns1 ~]# vim usddfor.sh
#!/bin/bash
ULIST=$(cat /root/users.txt)
for UNAME in $ULIST
do
        userdel -r $UNAME &>/dev/null
done

上面已经给过权限了
所以省略给权限步骤

[root@dns1 ~]# ./usddfor.sh	//测试执行结果
[root@dns1 ~]# id chenye
id: chenye: no such user	//提示无此用户

3.根据IP地址列表检查主机状态

首先创建列表文件

[root@dns1 ~]# vim /root/ipadds.txt
172.16.16.1
172.16.16.22
172.16.16.220

循环检查各主机的脚本

[root@dns1 ~]# vim chkhosts.sh		//循环检查各主机的脚本
#!/bin/bash
HLIST=$(cat /root/ipadds.txt)
for IP in $HLIST
do
        ping -c 3 -i 0.2 -w 3 $IP &> /dev/null
        if [ $? -eq 0 ]
        then
                echo "Host $IP is up."
        else
                echo "Host $IP is down."
        fi
done

接下来给权限然后进行检查主机状态

[root@dns1 ~]# chmod +x chkhosts.sh
[root@dns1 ~]# ./chkhosts.sh	//测试并确认执行结果
Host 172.16.16.1 is down.
Host 172.16.16.22 is down.
Host 172.16.16.220 is down.

二、使用while循环语句

1.while语句结构

结构代码如下:

while 条件测试操作
do
	命令序列
done

使用while循环语句时,有两个特殊条件测试操作,即true(真)和false(假)。

在这里插入图片描述

2.while语句应用示例

代码如下:

[root@dns1 ~]# vim uaddwhile.sh
#!/bin/bash
PREFIX="stu"
i=1
while [ $i -le 20 ]
do
        useradd ${PREFIX}$i
        echo "123456" | passwd --stdin ${PREFIX}$i &
> /dev/null
        let i++
done

给权限测试

[root@dns1 ~]# chmod +x uaddwhile.sh
[root@dns1 ~]# ./uaddwhile.sh
[root@dns1 ~]# grep "stu" /etc/passwd | tail -3
stu18:x:1023:1023::/home/stu18:/bin/bash
stu19:x:1024:1024::/home/stu19:/bin/bash
stu20:x:1025:1025::/home/stu20:/bin/bash

删除以上脚本所添加的用户,主要将添加命令改为删除用户即可

代码如下:

[root@dns1 ~]# vim uaddwhile.sh
#!/bin/bash
PREFIX="stu"
i=1
while [ $i -le 20 ]
do
        userdel -r $(PREFIX)$i
        let i++
done

执行删除

[root@dns1 ~]# chmod +x uaddwhile.sh
[root@dns1 ~]# ./uaddwhile.sh 
[root@dns1 ~]# id stu20
id: stu20: no such user

三、case分支

1.case语句的结构

case语句只是判断一个变量的不同取值
语法结构如下

case 变量值 in
模式1)
	命令序列1
	;;
模式2)
	命令序列2
	;;
	·····
*)
	默认命令序列
esac

在这里插入图片描述


2.case语句应用

使用case分支语句时,有几个值得注意的特点。
case行尾必须为单词“in“,每一模式必须有括号”)“结束。
双分号”;;“表示命令序列结束。
模式字符串中,可以用方括号表示一个连序的范围,如”[0-9]“,还可以用竖杠符号”|“表示或,如”A|B“。
最后的”)“表示默认模式,其中的相当于通配符。

示例
[root@dns1 ~]# vim hitkey.sh#!/bin/bash
read -p "请输入一个字符,并按回车键确认:" KEY
case "$KEY" in
        [a-z] | [A-Z])
                echo "您输入的是字母."
                ;;
        [0-9])
                echo "您输入的是数字."
                ;;
        *)
                echo "您输入的是空格、功能键或其他制字符."
esac
[root@dns1 ~]# chmod +x hitkey.sh 
[root@dns1 ~]# ./hitkey.sh 
请输入一个字符,并按回车键确认:1
您输入的是数字.
[root@dns1 ~]# ./hitkey.sh 
请输入一个字符,并按回车键确认:a
您输入的是字母.
[root@dns1 ~]# ./hitkey.sh 
请输入一个字符,并按回车键确认: 
您输入的是空格、功能键或其他控制字符

shell脚本都是基础的部分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值