设为首页 收藏本站
查看: 341|回复: 0

[经验分享] bash脚本编程for

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-7-25 09:12:54 | 显示全部楼层 |阅读模式
bash脚本编程:
   
    if语句、bash -n、bash -x

        CONDITION:
            bash命令:
                用命令的执行状态结果;
                    成功:true
                    失败:flase

                成功或失败的意义:取决于用到的命令;

        单分支:
            if CONDITION; then
                if-true
            fi

        双分支:
            if CONDITION; then
                if-true
            else
                if-false
            fi

        多分支:
            if CONDITION1; then
                if-true
            elif CONDITION2; then
                if-ture
            elif CONDITION3; then
                if-ture
            ...
            esle
                all-false
            fi

            逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束;

        示例:用户键入文件路径,脚本来判断文件类型;
            #!/bin/bash
            #

            read -p "Enter a file path: " filename

            if [ -z "$filename" ]; then
                echo "Usage: Enter a file path."
                exit 2
            fi

            if [ ! -e $filename ]; then
                echo "No such file."
                exit 3
            fi

            if [ -f $filename ]; then
                echo "A common file."
            elif [ -d $filename ]; then
                echo "A directory."
            elif [ -L $filename ]; then
                echo "A symbolic file."
            else
                echo "Other type."
            fi   
            
        注意:if语句可嵌套;

    循环:for, while, until
        循环体:要执行的代码;可能要执行n遍;
            进入条件:
            退出条件:

        for循环:
            for 变量名  in 列表; do
                循环体
            done

            执行机制:
                依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束;

            示例:添加10个用户, user1-user10;密码同用户名;
                #!/bin/bash
                #

                if [ ! $UID -eq 0 ]; then
                    echo "Only root."
                    exit 1
                fi

                for i in {1..10}; do
                    if id user$i &> /dev/null; then
                      echo "user$i exists."
                    else
                        useradd user$i
                    if [ $? -eq 0 ]; then
                        echo "user$i" | passwd --stdin user$i &> /dev/null
                            echo "Add user$i finished."
                        fi
                    fi
                done

            列表生成方式:
                (1) 直接给出列表;
                (2) 整数列表:
                    (a) {start..end}
                    (b) $(seq [start [step]] end)
                (3) 返回列表的命令;
                    $(COMMAND)
                (4) glob
                (b) 变量引用;
                    $@, $*


            示例:判断某路径下所有文件的类型
                #!/bin/bash
                #

                for file in $(ls /var); do
                    if [ -f /var/$file ]; then
                    echo "Common file."
                    elif [ -L /var/$file ]; then
                    echo "Symbolic file."
                    elif [ -d /var/$file ]; then
                    echo "Directory."
                    else
                    echo "Other type."
                    fi
                done            

            示例:
                #!/bin/bash
                #
                declare -i estab=0
                declare -i listen=0
                declare -i other=0

                for state in $( netstat -tan | grep "^tcp\>" | awk '{print $NF}'); do
                    if [ "$state" == 'ESTABLISHED' ]; then
                    let estab++
                    elif [ "$state" == 'LISTEN' ]; then
                    let listen++
                    else
                    let other++
                    fi
                done

                echo "ESTABLISHED: $estab"
                echo "LISTEN: $listen"
                echo "Unkown: $other"               

    练习1:/etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;
        分别读取每个文件,以K开头的文件输出为文件加stop,以S开头的文件输出为文件名加start;
            “K34filename stop”
            “S66filename start”

    练习2:写一个脚本,使用ping命令探测172.16.250.1-254之间的主机的在线状态;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-248946-1-1.html 上篇帖子: Centos网络配置后不能访问外网 下篇帖子: linux压缩、解压缩及归档工具
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表