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.www58058.com/37442

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

相關推薦

  • 178linux博客寫作技巧

    為什么要寫博客 為什么要寫在178linux上 如何注冊178linux 178linux的文章提審規則 178linux寫文章的技巧 markdown 語法 為什么要寫博客 寫博客的好處不言而喻,也不做過多解釋,眼過千遍不如手過一遍。知識的吸收需要很長的過程,這個過程越艱難越我們對知識的吸收程度也越好。對于找工作也有好處,側面是自己工作能力的證明,大量學員…

    Linux干貨 2016-09-06
  • Linux防火墻之基本原理

    本系列文章主要講述Linux防火墻的基本原理和基礎使用方法: 1.什么是防火墻: 當我們把計算機連入互聯網與其他計算機進行通信時,這無疑也將自己的信息暴露了,那就意味著可能會有一些心懷不軌的人會利用這些信息來攻擊自己的主機,尤其是作為一臺服務器向互聯網用戶提供服務時,就迫切需要一種隔離和保護機制,來隔離外部網絡,達到保護自我的目的。而這種隔離機制就叫做防火墻…

    Linux干貨 2016-12-27
  • shell腳本(一)

     本周是來馬哥教育的第四周,本周重點是shell腳本的編寫,本篇博客也是以shell腳本的簡述為主。 一.shell腳本的概念及意義     shell腳本是linux下的一種編程方式,百度百科給出這樣的釋義:腳本(shell script)是利用shell的功能所寫的一個程序,這個程序是使用純文本文件,將一…

    Linux干貨 2017-08-05
  • rpm包管理(二)

    查詢查詢庫文件包查詢[select-options][query-options]licdR常用的查詢用法:卸載:二進制文件的恢復包效驗使用rpm命令導入公鑰(KEY文件)驗證rpm包來源(光盤)的來源及完整性檢查包安裝后生成的文件,是否發生過變動RPM包管理器的數據庫如果某個rpm相關內容被刪除如果rpm命令的包被刪除了信息庫被刪除了刪除/usr/bin下…

    Linux干貨 2016-09-19
  • 文本處理工具練習題(包含正則)

    正則練習題(包含文本處理練習題) 問題 找出ifconfig命令結果中本機的所有IPv4地址  查出分區空間使用率的最大百分比值 查出用戶UID最大值的用戶名、UID及shell類型 查出/tmp的權限,以數字方式顯示 統計當前連接本機的每個遠程主機IP的連接數,并按從大 到小排序 答; ifconfig | grep -o '[0-9]\…

    Linux干貨 2016-08-08
  • liunx性能監控工具總結

    1.uptime 1)顯示的信息:顯示當前時間,系統已啟動的時間,當前在線人數,系統平均負載(1分鐘、5分鐘、10分鐘的平均負載,一般不會超過1) 2)系統平均負載:指在特定時間間隔內運行隊列中的平均進程數。 3)如果每個CPU內核的當前活動進程數不大于3的話,那么系統的性能良好。如果每個CPU內核的任務數大于5,那么這臺及其的性能有嚴重問題 4)ruguo…

    Linux干貨 2016-09-09
欧美性久久久久