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 20:46
下一篇 2016-08-21 20:46

相關推薦

  • grub知識與故障排除

    知識點回顧 at 任務的存放位置:/var/spool/at/ crond 任務存放位置:/var/spool/cron/username 查看服務有沒有運行 centos6:  service  atd  status    chkconfig –list atd chkconfig atd o…

    Linux干貨 2016-09-13
  • 馬哥教育網絡班22期+第7周課程練習

    1、創建一個10G分區,并格式為ext4文件系統; fdisk /dev/sdd n p 1 2048 +10G w (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; mke2fs -t ext4 -b 2048 -m 2&nb…

    Linux干貨 2016-09-26
  • 第10天:程序包,腳本,sed

    http://note.youdao.com/yws/public/redirect/share?id=b9432a76ff1180b42e01f6eb7c9fc90e&type=false

    Linux干貨 2016-08-18
  • 文件尋蹤和文件壓縮

    文件查找工具: 文件:根據文件的種屬性去找到相應文件 文件查找工具:locate, find locate: 根據此前updatedb命令生成的數據庫來完成文件查找查找速度很快非實時查找,結果不精確;模糊查找; 必要時,可手動執行updatedb命令; find命令:   通過遍歷指定的目標目錄,實時查找符合指定屬性的文件; 精確匹配;速度略慢; …

    Linux干貨 2016-08-19
  • Linux的安全控制訪問模塊之SElinux

    SElinux   1、Selinux介紹:Linux的一個強制訪問控制安全模塊,2000年以GNU GPL發布,Linux內核2.6版本集成在內核中。 DAC:自由訪問控制,進程是無束縛的。 MAC:強制訪問控制,策略的規則決定控制的嚴格程度(策略被用來定義被限制的進程能夠使用那些資源[文件和端口]);進程的可以被限制的;默認情況下,沒有允許的行…

    Linux干貨 2016-09-19
  • LAMP

    備注:本次安裝是采用的系統自帶的yum源進行安裝的 第一步:安裝Apache 1:安裝apache,命令如下: yum install?-y httpd   2:修改httpd.conf,修改ServerName的域名,具體步驟如下: 使用vi編輯器打開apache配置文件,命令如下: vi /etc/httpd/conf/httpd.conf 按…

    Linux干貨 2017-10-09
欧美性久久久久