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
下一篇 2016-09-19

相关推荐

  • ELK-5.5.1部署

    ELK简介 ELK Stack是软件集合Elasticsearch、Logstash、Kibana的简称,由这三个软件及其相关的组件可以打造大规模日志实时处理系统。 其中,Elasticsearch 是一个基于 Lucene 的、支持全文索引的分布式存储和索引引擎,主要负责将日志索引并存储起来,方便业务方检索查询。 Logstash是一个日志收集、过滤、转发…

    2017-12-04
  • 负载均衡一个PHP应用

    1、mariadb、nfs服务器的设置 (centos 7) [root@localhost ~]# rpm -q rpcbind rpcbind-0.2.0-32.el7.x86_64 [root@localhost ~]# rpm -q nfs-utils (默认n…

    Linux干货 2016-10-31
  • 马哥教育网络班22期第一周课程练习3-未闻花名

    man命令后面可以加一个数字参数,表示具体的范围定位: 数字"1"表示用户命令 数字"2"表示系统调用 数字"3"表示C语言库函数 数字"4"表示设备或特殊文件 数字"5"表示文件格式和规则 数字"6"表示游戏及其他 数字"7&q…

    Linux干货 2016-08-15
  • corosync + pacemaker + iscsi实现高可用mysql (上)

    一、实验图   二、准备实验环境:  1)确保sql服务器之间可以基于主机名通信 [root@SQL1 ~]# vim /etc/hosts 172.16.2.13  SQL1.linux.com  SQL1 172.16.2.14  SQL2.li…

    Linux干货 2015-07-09
  • 软件包管理(RPM和yum)

        软件包在系统管理中,软件包的管理是最重要的,是系统管理的基础的基础;只有我们学会软件包的管理才能谈得上其它的应用;本文以目录式的文档格式,列出新手弟兄所面对的软件包的安装、更新、查询相对的文档,以及几个常用的软件包管理工具。 软件包管理:     一,RPM包管理; &n…

    Linux干货 2016-09-06
  • 马哥Linux第六周作业

    网络管理 进程查看及管理之ps,top,htop,dstat,vmstat

    2018-01-20