bash 循環語句for、while、until

循環執行

循環執行
    定義:將某段代碼有次數或無次數循環執行多次。
    構成要素:退出條件和進入條件
    循環的三種語句:for、while、until

for循環:

 
    格式
    for 變量 in 列表;do
        循環執行語句
    done
    
    執行機制:
    依次將列表中的元素賦值給“變量名” ; 每次賦值后即執行一次循環體; 直到列表中的元素耗盡,循環結束
  
  列表生成方式:
      1、直接給出生成列表
      2、{1..10} 注意:{1..$變量名}是錯誤的寫法
          `seq start step end`  start:起始值 (可以寫可不寫)
                                step:步長(可以寫可不寫)
                                end:終止值,可以 $變量名
     3、返回列表的命令                                                           
        $(common) 例如:`ls /var/*`
     4、使用 glob, 如: *. sh
       5、變量引用;
        $@, $*
    
    for循環類似c++用法
        for ((控制變量初始化;條件判斷表達式;控制變量的修正表達式))
        do
            循環體
        done

for循環練習題

   
    1、判斷/var/目錄下所有文件的類型
    2、 添加10個用戶 user1 - user10,密碼同用戶名
    3、 /etc/rc.d/rc3.d目錄下分別有多個以K開頭和以S開頭的文件;分別讀取每個文件,以K開頭的文件輸出為文件加stop
    ,以S開頭的文件輸出為文件名加start;
    “ K34filename stop”
    “S66filename start”
    4、寫一個腳本,提示輸入正整數n的值,計算1+2+3+…n的總和
    5、 打印九九乘法表

    

   
    答案一
        [root@centos7 bin]# cat varfor.sh 
    #!/bin/bash
    for fname in `ls -d /var/*`             注意:ls -d /var/*列出的是文件的絕對路徑,如果用ls /var/列出的為相對路徑,需要到/var/目錄下才能判斷
    do
	if [ -h $fname ];then
		echo "file $fname  is symbolic link"
	elif [ -d $fname ];then
		echo "file $fname is dirctor"
	elif [ -f $fname ];then
		echo "file $fname is commom file"
	elif [ -b $fname ];then
		echo "file $fname is a block device "
	else  [ -c $fname ]
		echo "file $fname is a character file"
	fi
    done

    [root@centos7 bin]# 
    
    
    答案:2
    [root@centos7 bin]# cat useraddfor.sh 
    #!/bin/bash
    for username in user{1..10};do
	if id -u $username >/dev/null 2>&1;then
		echo "user exit"
	else 
		useradd $username
		echo "useradd success"
		echo "$username:$username" |chpasswd
	fi
    done
    [root@centos7 bin]# 
    
    答案:3
    
    [root@centos7 bin]# cat   rc3d.sh 
    #!/bin/bash
    for fname in $(ls /etc/rc.d/rc3.d);do
	if	[[ "$fname" =~ ^[kK].* ]];then
		echo "$fname stop"
	elif [[ "$fname" =~ ^[sS].* ]];then
		echo "$fname start"
	fi
    done
    [root@centos7 bin]# 
    
    答案四:
        
        [root@centos7 bin]# cat readnsum.sh 
        #!/bin/bash
        #name:wangnannan
        read -p "please input a inter:" int
        if let $int+0 ;then
	    for i in `seq 1 $int`;do
		let sum+=$i
	    done
        else 
	    echo "you input is not a integer"
    	    exit 22 
        fi
        echo "from 1 to $int sum is :$sum"
        [root@centos7 bin]#
        
        答案5
        [root@centos7 until]# cat chengfabiaofor2.sh 
        #!/bin/bash
        #name:wangnannan
        for ((i=1;i<=9;i++));do
             for((j=1;j<=i;j++));do
              echo -ne "\033[41;41;41;41;32;4m$j*$i=$[j*i]\033[m \t"
             done
             echo
        done
        [root@centos7 until]# 
        
        
        [root@centos7 bin]# cat chengfabiao.sh 
        #!/bin/bash
        for i in {1..9};do
             for j in `seq 1 $i `;do
                  echo -e "$j*$i=$[ $i*$j ] \c "
             done
             echo -e "\n"
        done
        [root@centos7 bin]#

while循環

    
    循環格式
        while 條件;do   
            循環語句
        done
    
    循環機制:
        循環控制條件;進入循環之前,先做一次判斷;每一次循環之后會再次做判斷;條件為“true”,則執行一次循環;直到條件測試狀態為“ false”終止循環
        因此: CONDTION一般應該有循環控制變量;而此變量的值會在循環體不斷地被修正
    
    循環要素:
        進入循環:條件為真
        退出循環:條件為假
        
    while循環特殊格式
        while read line;do
            循環體
        done < /path/somefile
        循環機制:依次讀取somefile文件中的每一行,將值賦給line 變量

until循環

        until CONDITION; do
            循環體
? done
? 進入條件: CONDITION 為false
? 退出條件: CONDITION 為true

循環控制語句:

continue:退出當次循環
break:退出整個循環

創建無線循環

while true ;do

    循環語句

done

until false ;do

    循環語句

done

原創文章,作者:wangnannan,如若轉載,請注明出處:http://www.www58058.com/37456

(0)
wangnannanwangnannan
上一篇 2016-08-21
下一篇 2016-08-21

相關推薦

  • LVM2

    1、邏輯卷     邏輯卷為何物:邏輯,是從人的角度出發的,合乎人類的思維的,所以邏輯卷相對于其它磁盤分區高級一些。主要作用就是可以進行動態擴展縮減,不像其它分區大小固定了要想變動就必須重新格式化。 在實際工作環境中,LVM更適用于現實復雜多變的環境。 現在使用的是LVM2,Logical Volume Manager,Version 2…

    Linux干貨 2016-08-30
  • Mysql 啟動時 報ERROR 2002,分析解決、

    1、故障現象 [root@localhost scripts]# mysql -u root ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysqld.sock’ (2) 2、故障分析 查看mysql實例的狀態 [root@localhost scr…

    Linux干貨 2017-08-29
  • N22-第九周作業

    第九周    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現;    #!/bin/bash    #    decl…

    Linux干貨 2016-10-24
  • KeepAlived實現HAProxy雙主并實現資源的動靜分離

    KeepAlived實現HAProxy雙主并實現資源的動靜分離 前言 HAProxy介紹 實驗拓撲 實驗環境 實驗步驟 配置后端httpd服務器 配置HAProxy實現backend負載均衡 測試動靜分離效果 配置KeepAlived 測試KeepAlived 配置DNS DNS測試 最終測試 總結 前言 我們這次使用HAProxy作為負載均衡調度器來實現后…

    Linux干貨 2016-04-16
  • Samba服務

    一 服務端配置 1 安裝所需軟件 [root@centos7 ~]# yum install samba samba-common -y samba主要提供SMB服務所需的各項服務程序、相關的文件及其他和Samba相關的設置等 samba-common提供服務端和客戶端都會用的的數據,包括主配置文件、語法檢查等 2 添加Samba用戶 添加smb1、smb2…

    Linux干貨 2017-06-13
  • grep簡述

    grep(Globel Search Regular Expression and Printing out the line) 它能使用正則表達式搜索文本,并把匹配的行打印出來。 grep包括grep、egrep和fgrep。 egrep表示擴展的grep,相比grep支持更多的匹配模式, “grep -E”相當于egrep。 fgrep是fast gre…

    2017-04-06
欧美性久久久久