關于shell腳本編程基礎第三篇

                      關于shell腳本編程基礎第三篇

 

本章主要內容:
循環的特殊用法;while;for;select 循環與菜單

                             
特殊用法:
while循環的特殊用法(遍歷文件每一行)
語法:
  while read (讀取) (列表);do    
       循環體
  done <
/文件/file
  依次讀取導入的文件中的每一行,并且將行賦值給變量列表中
=================================================

命令行舉例:
[root@localhost ~]# while read suru;do
echo $suru;done </etc/issue
S
Kernel r on an m
將/etc/issue中的內容按行讀取到變量列表中

=================================================

shell腳本舉例:
[root@localhost ~]# vim whileUID.sh
#!/bin/bash
#
#user:Compro
#將/etc/passwd
中的所有UID進行相加之和
sum=0
while read line
do
        sum=$[sum+`echo $line|cut -d: -f3`]
done < /etc/passwd
echo
$sum

運行結果:
[root@localhost
~]# bash whileUID.sh
85210
調試執行:
[root@localhost ~]#
bash -x whileUID.sh
會顯示出來詳細的執行狀態。
===============================================================================

命令行舉例:
~]# while read -p
"who are you?" suru;do echo $suru;done
循環  直接打印提示
who are you?  調用輸入的內容顯示。死循環
運行結果
who are you?xiaomage
xiaomage
who are you?xmg
xmg

就這樣一直循環下去。
=================================================================================

shell腳本練習
[root@localhost
~]# vim whileuserxin.sh
#!/bin/bash
#
#user:Compro
#掃描/etc/passwd恩件每一行,如果發現注釋信息字段為空,則填充用戶名和辦公室號碼。>并提示該用戶的注釋信息已經修改成功
while read line
do
        xinxi=$(echo $line | cut -d: -f5)
        if [[ -z "$xinxi" ]];then
        name=$(echo $line |cut -d: -f1)

        chfn -f $name $name &> /dev/null
        chfn -p 38763415 $name &> /dev/null
        echo "$name xinxi modify complete "
        fi
done <
/etc/passwd

#用法:
chfn [選項] [用戶名]
選項:
 -f, –full-name
<全名>       真實姓名
 -o, –office
<辦公>          辦公號碼
 -p, –office-phone
<電話>   辦公電話
 -h, –home-phone <電話>    
住宅電話

=================================================================================

特殊用法(())
雙小括號方法,就是((…))格式,也可以用于算數運算
(( … )): (( 表達式 ))
   
估值算術表達式。
    表達式按照算術法則進行估值。
    等價于 "let 表達式".   
   
退出狀態
    如果表達式估值為0則返回 1;否則返回0。
例如:~]# i=10;((i++));echo $i
      ~]# i=10;let i++;echo $i
雙小括號方法也可以使用bash shell實現C語言風格的變量操作

for循環的特殊格式:
for ((控制變量初始化;條件判斷表達式;控制變量的修正表達式))
do
    循環體
done
控制變量初始化:僅在運行到循環代碼段時執行一次
控制變量的修正表達式:每輪循環結束會先進行控制變量修正運算,而后在做條件判斷
=================================================================================

簡單shell腳本舉例:
for
((i=1;i<10;i++))   定義變量=1  然后判斷i是否小于10;如果不小于10,就執行打印變量值;
do                    
然后遞增運算i++在前面的基礎上加1,循環到條件為假時,退出循環,
  echo
$i            如果條件到達9的時候就會終止,條件是i小于10,你能超過10
done                   循環結束退出

關于shell腳本編程基礎第三篇=================================================================================

shell腳本練習
[root@localhost
~]# vim for992.sh
#!/bin/bash
#
#user:Compro
for (( i=1 ; i<=9 ; i++ ))          這個就不解釋了
看上面的解釋就行了;
do
       
for (( j=1 ; j<=i ; j++))   嵌套for循環,定義運算變量值,j=1 j小于等于$i的值, 
然后在j的值基礎之上進行遞增運算。
       
do                         
當循環到小于等于i的時候就停止了,也就是說i是9行,j在9行的基礎上,每一行進行對應打印,比如1行打印1次,2行打印2次,以此類推;直到循環結束
                echo -ne "$i*$j=$(($i*$j))\t"      
        done                       
$i的值*$j的值(1*1;2*1;2*2)=  拿$i的值和$j的值進行乘法運算的結果
       
echo                        例如1*1=1 ;2*1=2;2*2=4  然后每一個結果之后加上\t空格
done                                循環體結束
運行結果:
[root@localhost ~]#
bash for992.sh
1*1=1 
2*1=2 2*2=4 
3*1=3 3*2=6 3*3=9 
4*1=4 4*2=8 4*3=12 4*4=16 
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 
=================================================================================

select 循環與菜單
    
select: NAME [in 詞語 … ;] do 命令; done
   
從列表中選取詞并且執行命令。
select
循環主要用于創建菜單,按數字順序排列的菜單選項,將顯示在標準錯誤上,并顯示PS3提示符,等待用戶輸入   
用戶輸入菜單列表中的某個數字 ,執行相應的命令,
語法:
select 變量 in 列表
    do
      循環體命令
     done     

命令行舉例:
~]# select caidan in
kr gbjd lm;do echo "you is $caidan";done
無限循環命令
變量名   列表1,2,3來表示位置 ;提示輸入變量的值;結束
~]# select cmd in
ls pwd hostname exit;do $cmd;done
可以定義變量名, 列表內是命令
對應的輸如數字就可以執行相應的命令結果
=================================================================================

shell腳本舉例:
PS3="提示符內容"
[root@localhost
~]# vim selectcaidan.sh
#!/bin/bash
#
#user:Compro
#利用select循環創建菜單變量
PS3="請輸入:"
a=拍黃瓜
b=韭菜雞蛋
c=蘭州拉面
select caidan in $a $b $c
do
case $caidan in
        $a)
               
echo "price is 66 Dollar"
                ;;
        $b)
               
echo "price is 69 Dollar"
                ;;
        $c)
               
echo "price is 99 Dollar"
                ;;
         *)
               
echo "you choose is false"
                break
                ;;
                esac
done

=================================================================================

執行shell腳本:
~]# bash selectcaidan.sh
1) 拍黃瓜
2) 韭菜雞蛋
3) 蘭州拉面
請輸入:1
price is 66 Dollar
請輸入:2
price is 69 Dollar
請輸入:3
price is 99 Dollar
請輸入:4
you choose is false
=================================================================================

用戶輸入被保存在內置變量
REPLY(回復) 中 ;會提示用戶輸入的是什么字符
[root@localhost ~]# vim
selectcaidan.sh
#!/bin/bash
#
#user:Compro
#利用select循環創建菜單變量
PS3="請輸入:"
a=拍黃瓜
b=韭菜雞蛋
c=蘭州拉面
select caidan in $a $b $c
do
case $caidan in
        $a)
               
echo "price is 66 Dollar"
                echo "you
input is $REPLY"      你輸入的是$
                ;;
        $b)
               
echo "price is 69 Dollar"
                echo "you
input is $REPLY"    
                ;;
        $c)
               
echo "price is 99 Dollar"
                echo "you
input is $REPLY"
                ;;
         *)
               
echo "you choose is false"
                echo "you
input is $REPLY"
               
break                           退出當前的整個循環。
                ;;
                esac
done

select
是個無限循環,因此要記住用break命令退出循環,或用exit命令終止腳本。也可以按Ctrl+c退出本次循環
注意:退出循環,和終止腳本是兩個概念。
select經常和case聯合使用
,與for循環類似,可以省略in后面的變量列表,此時可以使用位置變量

 

 

 

 

 

 

原創文章,作者:小馬哥,如若轉載,請注明出處:http://www.www58058.com/37822

(0)
小馬哥小馬哥
上一篇 2016-08-21 20:47
下一篇 2016-08-21 20:47

相關推薦

  • 用戶權限過濾練習(w4)

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其他用戶均沒有任何訪問權限。 [root@keyou ~]# cp -r /etc/skel/ /home/tuser1 | chmod -R g-rwx,o-rw…

    系統運維 2016-11-20
  • 關于網絡配置管理

                                                      &nbsp…

    系統運維 2016-09-07
  • mysql備份還原

    一、前言 數據對于一個公司來說有多重要這點不說大家也知道,數據還在,服務崩潰還可重建。為什么要備份?很簡單,天災人禍。比如硬件故障,軟件故障,自然災害,黑客攻擊或自身誤操作等因素。這時候備份,恢復數據就顯得至關重要了。 二、基礎概念 由于備份與恢復需要用到一些必要的知識,故在此先講解下 2.1二進制日志 myql日志有多種,其中二進制日志文件對數據恢復有很大…

    Linux干貨 2015-11-30
  • Bash Shell編程初學基礎篇之一

     Bash Shell編程初學基礎篇之一 說明: 本文僅供初學Linux  Bash  shell學員參考學習,大神們如有興趣請批評指正?。。?   相信對于很多Linux初學者或者僅僅是聽說Linux還沒有接觸過的同學會有一種神秘感或者不敢碰觸的感覺,今天就幫大家揭開它的神秘面紗,其實并沒有那么深不可測,只…

    Linux干貨 2015-03-29
  • 用戶 組 和權限 以及權限的 分類

    關于文件的安全我們要從3A驗證 說起     1  Authentication:認證      2  Authorization:授權      3  Accouting|Audition:審計 由于系統文件的用戶太多為了便于管理 我們便把系統的用…

    系統運維 2016-08-04
  • 實現真實的機柜模擬圖[原創]

    一般能反映機房設備位置、結構我們都喜歡通過網絡拓撲圖來展現,但個人感覺還不夠直觀、明了的表現出自己想要的結果(自己太挑剔了,呵呵)。因此寫一個生成真實機柜模擬圖平臺,實現與真實服務器外觀、服務狀態、空閑位置等信息。在線效果圖http://blog.liuts.com/idc/系統截圖1、平臺顯示某一排截圖2、平臺顯示某臺服務器詳細信息截圖3、狀態說明2U服務…

    Linux干貨 2015-03-27

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-22 13:34

    文章對shell語句的語法總結的很好,這道華麗的分割線也是很6,可以嘗試著用markdown來寫,這樣會讓整個文章看起來好看多了。

欧美性久久久久