linux12shell编程 -->流程控制之for循环2

Posted FikL-09-19

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux12shell编程 -->流程控制之for循环2相关的知识,希望对你有一定的参考价值。

流程控制之for循环

案例6:统计etc下每种文件类型的数量

#!/bin/bash
dir='/etc'
for i in `ls $dir`
do
    if [ -b $dir/$i ];then
        ((block++))  # 或者 let block++,下同
    elif [ -f $dir/$i ];then
        ((file++))
         
    elif [ -d $dir/$i ];then
        ((directory++))
    else
        ((unkown++))
    fi
done

echo 'block' $block
echo 'regular file' $file
echo 'directory' $directory
echo 'unkown' $unkown

[root@openvpn day5]# cat dir_etc.sh 
#!/bin/bash
dir='/etc'
block=0
file=0
directory=0
other=0
for i in `ls $dir`
do
    if [ -b $dir/$i ];then
        ((block++))  # 或者 let block++,下同
    elif [ -f $dir/$i ];then
        ((file++))
         
    elif [ -d $dir/$i ];then
        ((directory++))
    else
        ((other++))
    fi
done

echo 'block:' $block
echo 'regular file:' $file
echo 'directory:' $directory
echo  'other:' $other
[root@openvpn day5]# ./dir_etc.sh 
block: 0
regular file: 108
directory: 96
other: 0

案例7:向脚本传递一个用户名,验证这个用户是否存在.

[root@web ~]# cat testuser.sh 
#!/bin/bash
id $1 &> /dev/null
if [ $? -eq 0 ];then
    echo "用户$1存在"
else
    echo "用户$1不存在"
fi
[root@web ~]# ./testuser.sh root
用户root存在

案例8:添加30个用户,再将它们删除

for i in {1..10};
do
    useradd user$i&&echo "user$i create successful"
done


for i in {1..10};
do
    userdel -r user$i&&echo "user$i delete successful"
done

案例9:输入账号信息,输入个数,批量创建用户user01、user02、user03…,密码默认123456

[root@web shell]# cat adduser.sh 
#!/bin/bash

read -p "请输入创建的用户名信息: " name
read -p "请输入创建的用户数量: " count

for i in `seq -w $count`
do
    echo $name$i
    useradd $name$i &>/dev/null
    echo 123 | passwd --stdin $name$i &>/dev/null
    id $name$i &>/dev/null
    [ $? -eq 0 ] && echo "$name$i create is ok" || echo "$name$i create is failed"
done

案例10:嵌套多层for循环,结合break与continue,(了解即可)

#1、使用break:
break 默认参数是 1 
所以写 break 等于 break 1
意义:退出当前循环层
break 2 则向上退出2层循环 当前循环也计算在退出层次里

# 示例
for i in {0..3}
do
    echo -e "第一层循环:loop$i"
    for j in {0..3} 
    do
        echo -e "\\t第二层循环:loop$j"
        for n in {0..3}
        do
            echo -e "\\t\\t第三层循环:loop$n:$i$j$n"
            if ((n==2));then
                break 3
            fi
        done
    done
done


#2、使用continue
continue = continue 1
在当次循环中忽略continue后续的代码
就是:立即结束当前循环中的当次循环,而转入当前循环的下一次循环

continue 2 等同于 break 1
continue 3 等同于 break 2
总结:continue n 等同于 break n-1

for i in {0..3}
do
    echo -e "第一层循环:loop$i"
    for j in {0..3} 
    do
        echo -e "\\t第二层循环:loop$j"
        for n in {0..3}
        do
            echo -e "\\t\\t第三层循环:loop$n:$i$j$n"
            if ((n==2));then
                continue 3
            fi
        done
    done
done

以上是关于linux12shell编程 -->流程控制之for循环2的主要内容,如果未能解决你的问题,请参考以下文章

2017-12-5Linux基础知识(15)shell编程

linux12shell编程 -->shell变量

linux12shell编程 -- >基本数据类型

ubuntu12.04中用emacs进行shell编程怎么配置呢?

linux12shell编程 --> expect

Linux实战——Shell编程练习(更新12题)