Linux基礎知識之選擇循環執行

1.選擇執行:

    a.單分支if語句:

        if 判斷條件;then(此處必須有;和then  then可以單獨占一行)

            語句1

            語句2

            

        fi(fi必須單獨占一行)

    b.雙分支if語句:

        if 判斷條件;then(此處必須有;和then  then可以單獨占一行時,分號可以省略)

            語句1

            語句2

            

        else

            語句3

            語句4

            

        fi(fi必須單獨占一行)

    c.多分支if語句:

        if 判斷條件;then(此處必須有;和then  then可以單獨占一行時,分號可以省略)

            語句1

            語句2

            

        elif 判斷條件;then

            語句3

            語句4

            

        elif …

            語句…

        else

            語句n

            

        fi(fi必須單獨占一行)

        ※逐條件進行判斷,第一次遇為“真”條件時,執行其分支,而后結束整個if 語句

    d.case語句

        case SWITCH in

        value1)

            statement

            

            ;;

        value2)

            statement

            

            ;;

        value3)

            statement

            

            ;;

        *)

            statement

            

            ;;

        esac

2.循環執行:將某代碼段重復運行多次

    重讀運行多次:

        循環次數事先已知

        循環次數事先未知

        有進入條件和退出條件

    循環有 for while until 

    a.for循環:

    for  變量名 in  列表;do

    循環體

    done

    執行機制 :

    依次將列表中的元素賦值給“變量名”;每次賦值后即執行一次循環體;直到列表中的元素耗盡,循環結束

    ※for循環根據列表執行,循環次數為列表中的次數

    列表生成方式:

        (1)直接給出列表

        (2)整數列表

            {start..end}

            $(seq [start [step]] end)

        (3)返回列表的命令

            $(COMMAND)

        (4)使用glob,如:*.sh

        (5)變量引用;

            $@,$*

    b.while 循環

    while CONDITION;do

    循環體

    done

    CONDITION:循環控制條件;進入循環之前,先做一次判斷;每一次循環之后會再次做判斷;條件為“true” ,則執行一次循環;直到條件測試狀態為“false” 終止循環。因此:CONDTION一般應該有循環控制變量;而此變量的值會在循環體不斷地被修正

    進入條件:CONDITION為true

    退出條件:CONDITION為false

    while當條件為真,執行循環,當條件為假,退出循環

    while循環之后,還有命令的時候,當while循環結束后,會執行while后面的命令

    c.until 循環

    until CONDITION; do

    循環體

    done

    CONDITION:循環控制條件;進入循環之前,先做一次判斷;每一次循環之后會再次做判斷;條件為“false” ,則執行一次循環;直到條件測試狀態為“ture” 終止循環

    進入條件:CONDITION為false

    退出條件:CONDITION為true

    d.循環控制語句 continue

    用于循環體中

    continue [N]:提前結束第N層的本輪循環,而直接進入下一輪判斷;最內層為第1層

    while CONDTIITON1; do

    CMD1

    

    if CONDITION2; then

    CMD2

    continue

    fi

    CMDn

    

    done

    e.循環控制語句break

    用于循環體中

    break [N]:提前結束第N層循環,最內層為第1層 層

    while CONDTIITON1; do

    CMD1

    

    if CONDITION2; then

     CMD2

    break

    fi

    CMDn

    

    done

    f.創建無限循環

    while true; do

    循環體

    done

    until false; do

    循環體

    done

    g.continue break exit的區別:

    當循環條件滿足continue時,提起結束該輪while循環,進入下一輪while循環(結束的是本輪while循環)

    當循環條件滿足break時,提前結束循環體的循環,改為執行循環之后的命令(結束的是循環體的執行)

    當循環條件滿足exit時,提前結束腳本的執行,直接退出腳本的執行,exit # 可以指定退出的錯誤值#

練習題總結:

1、寫一個腳本/root/bin/createuser.sh ,實現如下功能:

使用一個用戶名做為參數,如果指定參數的用戶存在,就顯示其存在,否則添加之;顯示添加的用戶的id 號等信息

    #!/bin/bash

read -p "please enter a username:" username

if id $username &>/dev/null ;then

echo "$username is exist."

else 

echo "No such user."

echo "Adding $username….."

useradd $username

echo "Adding $username success."

id $username

fi

2、寫一個腳本/root/bin/yesorno.sh ,提示用戶輸入yes或no, 并判斷用戶輸入的是yes還是no, 或是其它信息

#!/bin/bash

read -p "please enter yes/no: " yesorno

case $yesorno in

[yY][Ee][Ss]|[Yy])

  echo "Yes!!!"

  ;;

[Nn][Oo]|[Nn])

  echo "No!!!"

  ;;

*)

  echo "Other char!!!"

esac

3、寫一個腳本/root/bin/filetype.sh, 判斷用戶輸入文件路徑,顯示其文件類型(普通,目錄,鏈接,其它文件類型)

#!/bin/bash

read -p "please enter file:  " filename

if [ -L $filename ];then

   echo "$filename is Symbol file."

elif [ -c $filename ];then

   echo "$filename is char file."

elif [ -d $filename ];then

   echo "$filename is dir file."

elif [ -b $filename ];then

   echo "$filename is  block file."

elif [ -f $filename ];then

   echo "$filename is common file."

elif [ -p $filename ];then

   echo "$filename is pipe file."

elif [ -S $filename ];then

   echo "$filename is socket file."

else

  echo "please enter a Correct file"

fi

4、判斷/var/ 目錄下所有文件的類型

#!/bin/bash

for filename in /var/*;do 

if [ -L $filename ];then

   echo "$filename is Symbol file."

elif [ -c $filename ];then

   echo "$filename is char file."

elif [ -d $filename ];then

   echo "$filename is dir file."

elif [ -b $filename ];then

   echo "$filename is  block file."

elif [ -f $filename ];then

   echo "$filename is common file."

elif [ -p $filename ];then

   echo "$filename is pipe file."

elif [ -S $filename ];then

   echo "$filename is socket file."

echo "please enter a Correct file"

fi

done

5、添加10個用戶user1-user10,密碼同用戶名

#!/bin/bash

for I in `seq 1 10`;do

if ! id user$I &>/dev/null;then

useradd user$I

echo "user$I" | passwd –stdin user$I

else

echo "The user$I has been exist."

fi

done

7、寫一個腳本,提示輸入正整數n的值,計算1+2+3+…n的總和

#!/bin/bash

read -p "please input a integer: " number

if [ $number -gt 0 ] ;then

   for i in `seq 1 $number`;do

        sum=$[$sum+$i] 

  done

     echo $sum

else

   echo "please input a integer."

fi

8、打印九九乘法口訣

#!/bin/bash

for i in {1..9};do

   for j in `seq 1 $i`;do

   echo -ne "$i*$j=$(($i*$j))\t"

   let j++

   done

   echo -e "\n"

   let i++

done

#!/bin/bash

i=1

while [ $i -le 9 ]

do 

   j=1

   while [ $j -le $i ]

   do

   echo -ne "$i*$j=$(($i*$j))\t"

   let j++

   done

   echo -e "\t"

   let i++

done

9、求100以內所有正整數之和

#!/bin/bash

sum=0

i=0

while [ $i -le 100 ]

do

   sum=$[$sum+$i]

   let i++

done

echo $sum

10、通過ping 命令探測10.1.252.1-254 范圍內的所有主機的在線狀態,統計在線主機和離線主機各多少。

#!/bin/bash

I=1

while [ $I -le 255 ]

do

   if ping -c 1 -W 1 10.1.252.$I &> /dev/null;then

     echo -e "10.1.252.$I   online."

   else 

     echo -e "10.1.252.$I    offline."   

   fi

   let I++

done

11、利用變量RANDOM 生成10個隨機數字,輸出這個10數字,并顯示其中的最大者和最小者

#!/bin/bash

number=`echo $[RANDOM%10+1]`

echo $number

read -p "please input number: " n

until [ $n -eq $number ]

do 

   if [ $n -lt $number ];then

    read -p "please input a number > $n :" n

   else

    read -p "please input a number < $n :" n

   fi

done

echo "You are right !!!"

12、隨機生成10以內的數字,實現猜字游戲,提示比較大或小,相等則退出。

#!/bin/bash

number=`echo $[RANDOM%10+1]`

echo $number

read -p "please input number: " n

until [ $n -eq $number ]

do 

   if [ $n -lt $number ];then

    read -p "please input a number > $n :" n

   else

    read -p "please input a number < $n :" n

   fi

done

echo "You are right !!!"

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

(0)
sjsirsjsir
上一篇 2016-08-18 22:17
下一篇 2016-08-19 08:36

相關推薦

  • Nginx反向代理、負載均衡的實現

    概述:     上篇介紹了Nginx作為web服務器的一些常用配置的說明,但是在實際生產環境中,Nginx更多是作為前端的負載均衡器,反代前端用戶請求到后端真實的web服務器上,完成LNAMP的組合的方式存在。本篇就介紹一些Nginx作為http的反向代理和前端負載均衡調度器的一些常用配置,具體包括:  &n…

    Linux干貨 2016-11-01
  • 文件查找find和locate

            在Linux這個一切皆文件的系統中怎么能快速和精確的查找到文件,是我們必不可少的技能。而文件查找的命令可以讓我們在很短的時間內在文件系統中找到我們要查找的文件。這就是我們要掌握的,因此我來介紹一下文件查找的這兩個命令locate和find。 文件查找:在文件系統上…

    Linux干貨 2016-08-24
  • 文件管理和用戶組權限管理小結

    文件管理 文件系統結構 /boot: 引導文件存放目錄,內核文件,引導加載器都存放在此目錄 /bin:供所有用戶使用的基本命令,不能關聯至獨立分區,os啟動即會用到的程序 /sbin:管理類的基本命令:不能關聯至獨立分區,os啟動即會用到的程序 /etc:配置文件目錄 /home:普通用戶家目錄 /root:管理員的家目錄 /dev: 設備文件及特殊文件存儲…

    2017-07-23
  • 進程管理,計劃任務

    一、進程相關概念及系統管理工具     進程概念         內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、 安全功能等         P…

    Linux干貨 2016-09-18
  • linux 系統日志管理

         在linux系統上面,系統可以記錄從開機到當前系統上面何時發生了那些事情,并將其分類,分級別寫到特定的日志文件當中,如系統自身產生的問題,用戶登錄信息,網絡數據信息等等。我們可以根據這些日志信息來解決系統方面的錯誤,網絡服務問題等等。日志對于安全來說,非常重要,它記錄了系統每天發生的各種各樣的事情,你可以通過它來檢查錯…

    2017-08-14
  • Shell腳本編程

    shell腳本編程 Bash為用戶提供了編程環境 相對于計算機而言,只能識別二進制文件,因此其所運行的其實是二進制指令,而這些二進制指令我們稱之為機器語言,屬于低級語言;程序員編程所使用的語言為高級語言,是人們比較容易理解的語言;因此,程序的執行過程:先把源碼程序翻譯成機器語言(生成可執行的文件),然后解釋執行。程序( 程序=指令+數據 )的編程風格有兩種:…

    2017-04-14

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-19 13:23

    文章對循環語句的語法進行了總結,并且通過示例加深了自己對語句相應的語法認識和理解,shell腳本要想寫好了,只有多寫,多讀優秀代碼。

欧美性久久久久