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

[经验分享] bash脚本编程(一)

[复制链接]
累计签到:161 天
连续签到:1 天
发表于 2017-4-26 16:06:28 | 显示全部楼层 |阅读模式
bash脚本编程

        while condition; do
                循环体
        done

        until condition; do
                循环体
        done

        示例:求100以内所有正整数的和:
                #!/bin/bash
                declare -i i=1
                declare -i sum=0
                while [ $i -le 100 ]; do
                        let sum+=$i
                        let i++
                done
                echo "Sum: $sum"
        ******************************************
                #!/bin/bash
                declare -i i=1
                declare -i sum=0

                until [ $i -gt 100 ]; do
                        let sum+=$i
                        let i++
                done
                echo "Sum:$sum"
        **************************************
        示例:打印九九乘法表
        #!/bin/bash
        declare -i j=1
        declare -i i=1

        until [ $j -gt 9 ]; do
                until [ $i -gt $j ]; do
                        echo -n -e "${i}X${j}=$[$i*$j]\t"
                        let i++
                done
                echo
                let i=1
                let j++
        done
        ************************************
        #!/bin/bash
        declare -i i=1
        declare -i j=1

        while [ $i -le 9 ]; do
                while [ $j -le $i ]; do
                        echo -n -e "${j}*${i}=$[$i*$j]\t"
                        let j++
                done
                echo
                let i++
                let j=1
        done
        *************************************
        循环控制语句(用于循环体中):
         continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;
                while CONDITION; do
                        CMD1
                        ...
                        if CONDITION2; then
                                continue
                        fi
                        CMDn
                        ...
                done
         break [N]:提前结束循环;
                while CONDITION; do
                        CMD1
                        ...
                        if CONDITION2; then
                                break
                        fi
                        CMDn
                        ...
                done
       
        示例:求100以内所有偶数之和,要求遍历100以内的所有正整数
        #!/bin/bash
        #
        declare -i i=0
        declare -i sum=0

        until [ $i -gt 100 ]; do
                let i++
                if [ $[$i%2] -eq 1 ]; then
                        continue
                fi
                let sum+=$i
        done

        echo "Even sum: $sum"

        示例:每隔3秒钟到系统上获取已经登录的用户信息,如果docker登录了,则记录于日志中,并退出
        #!/bin/bash
        read -p "Enter a user name:" username

        while true; do
                        if who|grep "^$username" &> /dev/null; then
                                        break
                        fi
                        sleep 3
        done
        echo "$username logged on." >> /tmp/user.log
        ************************************************
        #!/bin/bash
        read -p "Enter a user name:" username
        until who|grep "^username" &> /dev/null; do
                sleep 3
        done
        echo "$username logged on." >> /tmp/user.log

        while 循环的特殊用法(遍历文件的每一行):
                while read line; do
                        循环体
                done < /path/from/filename
                依次读取file文件中的每一行,将值赋给变量line
        #!/bin/bash
        while read line; do
                if [ $[`echo $line |cut -d: -f3` % 2] -eq 0 ]; then
                        echo -e -n "username: `echo $line | cut -d: -f1`\t "
                        echo "uid: `echo $line | cut -d: -f3`"
                fi
        done < /etc/passwd
        *********************************************
        for 循环体特殊格式:
        for((变量初始化;条件判断表达式;控制变量修正表达式)); do
                循环体
        done
        示例:求100以内所有正整数的和:
        #!bin/bash
        declare -i sum=0
        for((i=1;i<=100;i++)); do
                let sum+=$i
        done
        echo "Sum: $sum"
        示例:打印九九乘法表
        #!/bin/bash
        for((j=1;j<=9;j++)); do
                for((i=1;i<=j;i++)); do
                        echo -e -n "${i}*${j}=$[$i*$j]\t"
                done
                echo
        done
编写脚本:
1.显示一个菜单:
        cpu) show cpu information;
        mem) show memory information;
        disk) show disk informationl
        quit) quit
2.提示用户选择选项
3.显示用户选择的内容
#!/bin/bash

cat <<EOF
=================================
cpu) show cpu information;
mem) show memory information;
disk) show disk informationl
quit) quit
==================================       
EOF
read -p "enter a option:" option
while [ "$option" != 'cpu' -a "$option" != 'mem' -a "$option" != 'disk' -a "$option" != 'quit' ]; do
        read -p "wrong option, enter again:" option
done

if [ "$option" == 'cpu' ]; then
        lscpu
elif [ "$option" == 'mem' ]; then
        cat /proc/meminfo
elif [ "$option" == 'disk' ]; then
        fdisk -l
else
        echo "quit"
        exit0
fi

条件判断:case 语句
case 变量引用 in
pat1)
        ...
        ;;
pat2)
        ...
        ;;
*)
        默认分支
        ;;
esac


#!/bin/bash

cat <<EOF
=================================
cpu) show cpu information;
mem) show memory information;
disk) show disk informationl
quit) quit
==================================       
EOF
read -p "enter a option:" option
while [ "$option" != 'cpu' -a "$option" != 'mem' -a "$option" != 'disk' -a "$option" != 'quit' ]; do
        read -p "wrong option, enter again:" option
done

case "$option" in
'cpu')
        lscpu
        ;;
'mem')
        cat /proc/meminfo
        ;;
'disk')
        fdisk -l
        ;;
*)
        echo "quit"
        exit0
        ;;
esac

编写一个脚本
1.脚本可接受参数: start, stop, restart, status;
2.如果参数非此四者之一,提示使用格式后报错退出
3.如果是start;则创建/var/lock/subsys/SCRIPT_NAME,便显示启动成功
4.如果是stop,则删除/var/lock/subsys/SCRIPT_NAME,并显示停止完成
5.如果是restart,则先stop,再start
6.如果是status,则
  如果/var/lock/subsys/SCRIPT_NAME文件存在,显示 running
  如果/var/lock/subsys/SCRIPT_NAME文件不存在,显示stopped
        其中:SCRIPT_NAME 为当前脚本名字



运维网声明 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-369617-1-1.html 上篇帖子: centos系统初始化脚本 下篇帖子: Red Hat RHCSARHCE 7 Cert Guide(七) 正整数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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