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

相关推荐

  • Mariadb数据库备份恢复系列(二):xtrabackup物理备份工具之完全备份

    实验二:利用xtrabackup+二进制日志实现完全备份和恢复数据库 1、安装xtrabackup软件包 2、验证数据的存储引擎类型 3、查看数据初始状态 4、利用innobackupex进行完全备份 5、进行apply-log操作 6、查看备份出来的文件的信息 7、模拟在完全备份后,对数进行修改,以测试通过二进制日志还原完全备份后尚未来得及备份的变化的数据…

    Linux干货 2016-11-24
  • Linux干货 2017-12-02
  • 网络班第七周 作业

    1、创建一个10G分区,并格式为ext4文件系统 (1) 要求其block大小为2048,预留空间百分比为2,卷标为MYDATA,默认挂载属性包含acl (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳 创建了一个20G的SCSI硬盘 fdisk /dev/sdb 创建ext4文件系统 ~]# mke2fs -…

    2017-09-16
  • shell脚本进阶

    一、流程控制 过程式编程语言:顺序执行、选择执行、循环执行 1.1 条件语句 1.1.1 if条件选择语句  选择执行: (注意: if 语句可嵌套) v  单分支:if  判断条件;then           条件为真的分支代…

    Linux干货 2016-11-27
  • hello 北京&Linux启程

    北京初感&Linux启程

    Linux干货 2018-03-26
  • 马哥教育网络班22期+第5周课程练习

    1、显示当前系统上root、fedora或user1用户的默认shell; [root@localhost ~]# awk -F: '{print $1,$7}' /etc/passwd| egrep "^\<(root|fedora|user…

    Linux干货 2016-09-15