for、while、until循环

一、for循环

         for 变量名 in 列表;do

            循环体

          done

         执行机制:

            依次将列表中的元素赋值给“变量名” ; 每次赋值后即执

            行一次循环体; 直到列表中的元素耗尽,循环结束

         列表生成方式:

            (1) 直接给出列表

            (2) 整数列表

            (a) {start..end}

            (b) $(seq [start [step]] end)

            (3) 返回列表的命令

            $(COMMAND)

            (4) 使用glob, 如: *.sh

            (5) 变量引用;

            $@, $*

二、while循环

         while CONDITION; do

            循环体

         done

       

          CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之

            后会再次做判断;条件为“ true”,则执行一次循环;直到条件测试

            状态为“ false”终止循环

         因此: CONDTION一般应该有循环控制变量;而此变量的值

                会在循环体不断地被修正

       

          进入条件: CONDITION为true;

         退出条件: CONDITION为false

三、until循环

         until CONDITION; do

            循环体

         done

         进入条件: CONDITION 为false

         退出条件: CONDITION 为true

四、循环控制语句continue

         用于循环体中

         continue [N]:提前结束第N层的本轮循环,而直接进入下一

                 轮判断;最内层为第1层

        

        while CONDTIITON1; do

            CMD1

            …

        if CONDITION2 ;then

            continue

        fi

            CMDn

            …

        done

五、循环控制语句break

         用于循环体中

         break [N]:提前结束第N层循环, 最内层为第1层

         while CONDTIITON1; do

              CMD1

              …

         if CONDITION2; then

             break

         fi

            CMDn

            …

          done

作业:

       

1、使用循环语句,写个脚本实现:

    *

   ***

  *******

 *********

#!/bin/bash

#

read -p "input line number:" line

declare -i n=1

declare -i lie=1

while [ $n -le "$line" ];do

            kong_number=$[$line-$n]

            xing_number=$[1+2*($n-1)]

            xing_start=$[$line-$n+1]

            xing_end=$[$kong_number+$xing_number]

            sum_lie=$[2*$kong_number+$xing_number]

            declare -i lie=1

        while [ "$lie" -le "$sum_lie" ];do

            if [ "$lie" -ge "$xing_start" ] && [ "$lie" -le "$xing_end" ];then

                echo -ne "\033[41m*\033[0m"

            else

                echo -ne "\033[31;45m \033[0m"

            fi

            let lie++

        done

        let n++

        echo

done

~     

chess.JPG

2、用until循环实现国际象棋棋盘

 

#!/bin/bash

#print the chessboard 

declare -i H=1

declare -i S=1

white="\033[1;41m \033[0m"

black="\033[1;47m \033[0m"

until [ $S -eq 9 ];do

    Syu=$[$S%2]

    if [ "$Syu" -eq 1 ]; then

        while [ $H -le 8 ];do

               yu=$[$H%2]

            [ $yu -eq 0 ] && echo -ne "$white" || echo -ne "$black"

        let H++

        done

    else

             until [ $H -eq 9 ];do

                yu=$[$H%2]

            [ $yu -eq 0 ] && echo -ne "$black" || echo -ne "$white"

            let H++

        done

    fi

    declare -i H=1

    let S++

    echo

done

cheeeee.JPG

8-19  作业:

1、1、编写服务脚本/root/bin/testsrv.sh,完成如下要求

(1) 脚本可接受参数:start, stop, restart, status

(2) 如果参数非此四者之一,提示使用格式后报错退出

(3) 如是start:则创建/var/lock/subsys/SCRIPT_NAME, 并显示“启动成功”

考虑:如果事先已经启动过一次,该如何处理?

(4) 如是stop:则删除/var/lock/subsys/SCRIPT_NAME, 并显示“停止完成”

考虑:如果事先已然停止过了,该如何处理?

(5) 如是restart,则先stop, 再start

考虑:如果本来没有start,如何处理?

(6) 如是status, 则如果/var/lock/subsys/SCRIPT_NAME文件存在,则显示“SCRIPT_NAMEis running…”

如果/var/lock/subsys/SCRIPT_NAME文件不存在,则显示“SCRIPT_NAME is stopped…”

其中:SCRIPT_NAME为当前脚本名

  1 #!/bin/bash

  2 #

  3 PS3="input your chioce:"

  4 select menu in start stop restart status

  5     do

  6         case $REPLY in

  7             start)

  8                     find /var/lock/subsys/testsrv.sh &> /dev/null

  9                 if [ $? -eq 0 ] ;then

 10                         echo "file exist" 

 11                 else

 12                          touch /var/lock/subsys/testsrv.sh

 13                         echo "file create successful" 

 14                 fi

 15                     ;;

 16             stop)

 17                     rm /var/lock/subsys/testsrv.sh &> /dev/null

 18                     [ $? -eq 0 ] && echo "停止完成" || echo "已经停止,无需重>    复"

 19                     ;;

 20 

 21             restart)

 22                     rm -f /var/lock/subsys/testsrv.sh &> /dev/null

 23                     touch /var/lock/subsys/testsrv.sh

 24                     echo "restart successfully"

 25                     ;;

 26 

 27             status)

 28                     find /var/lock/subsys/testsrv.sh

 29                 [ $? -eq 0 ] && echo "testsrv.sh running…" || echo "testsrv.    sh is stopped.."

 30                     ;;

 31             *)

 32                     echo "error" ;break

              

2、编写脚本/root/bin/copycmd.sh

(1) 提示用户输入一个可执行命令名称;

(2) 获取此命令所依赖到的所有库文件列表

(3) 复制命令至某目标目录(例如/mnt/sysroot)下的对应路径下;

如:/bin/bash ==> /mnt/sysroot/bin/bash

/usr/bin/passwd==> /mnt/sysroot/usr/bin/passwd

(4) 复制此命令依赖到的所有库文件至目标目录下的对应路径下:

如:/lib64/ld-linux-x86-64.so.2 ==> /mnt/sysroot/lib64/ld-linux-x86-64.so.2

(5)每次复制完成一个命令后,不要退出,而是提示用户键入新的要复制的命令,并重复完成上述功能;直到用户输入quit退出

#!/bin/bash

while true ;do 

read -p "please input cmd:" cmd

if [[ "$cm" == "quit" ]];then

echo "exiting"

exit

else

cmd_path=`whereis $cmd | cut -d ' ' -f2`

cmd_lib_list=`ldd $cmd_path`

cp -a $cmd_path /tmp/test/temp_cp_dir

[ $? -eq 0 ] && echo "cp file successful" || echo "cp file error"

for i in cmd_lib_list;do

cp -a $i /tmp/test/temp_cp_dir

[ $? -eq 0 ] && echo "cp $i successful" || echo "cp lib $i error"

done

echo "cp $cmd successful"

fi

done

原创文章,作者:ldt195175108,如若转载,请注明出处:http://www.178linux.com/37442

(0)
ldt195175108ldt195175108
上一篇 2016-09-19 13:49
下一篇 2016-09-19 13:49

相关推荐

  • ansible——自动化运维工具

    Ansible SSH-based configuration management, deployment, and task execution system 运维工具的分类: agent:基于专用的agent程序完成管理功能,puppet, func, zabbix, … agentless:基于ssh服务完成管理,ansible, fab…

    Linux干货 2016-11-06
  • iptables详解

    iptables的工作机制 iptables有五个钩子函数(hook functions),也叫五个规则链。 1.PREROUTING (路由前) 2.INPUT (数据包流入口) 3.FORWARD (转发关卡) 4.OUTPUT(数据包出口) 5.POSTROUTING(路由后)   这是NetFilter规定的五个规则链,任何一个数据包,只要…

    Linux干货 2017-03-15
  • 马哥教育千万级PV实战大揭秘

    又到了激动人心的架构实战项目实践时间,马哥教育面授班的学员都很期待这一刻的到来,因为经过此次洗礼,能让自己成长更多! 上周二,马哥教育张Sir带领18期面授班的学员们做千万PV级别的电商架构实战项目!新增的多台R710企业级服务器设备,轻松搭建大数据、云计算等高端实验环境,让实战,更加真实!相信经过这场实战的洗礼,小伙伴们架构技能会有更大提升! 【张Sir生…

    2016-06-30
  • 第五周作业

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;grep “^[[:space:]]+”  /boot/grub/grub.conf 2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;[root@localhost ~…

    Linux干货 2017-03-10
  • 一键编译安装httpd服务

    一键编译安装httpd服务 背景: httpd服务是一个常用的web服务,所以很多地方会用到,这里写一个一键编译安装httpd服务的脚本。 环境: 系统:centos6.9和centos7.3(应该所有的6和7的版本都可以使用) httpd源代码版本:httpd-2.2.34.tar.bz2和httpd-2.4.27.tar.bz2 。下载网址官网:http…

    2017-09-16
  • 系统启动及内核管理

    一、知识整理 1、nohup 命令:不挂断地运行命令,远程连接当断网或断开shell时还可以继续运行。无论是否将nohup命令的输出重定向到终端,输出都将附加到当前目录下的nohup.out文件中,如果当前不可写,则重定向到家目录nohup.out文件,除非定义了输出文件。 nohup COMMAND 输出重定向至文件 nohup COMMAND &…

    Linux干货 2016-09-19