關于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
下一篇 2016-08-21

相關推薦

  • 推薦-Corosync + Pacemaker 搭建高可用Httpd服務

    Corosync + Pacemaker 搭建高可用Httpd服務 實驗描述 1.兩個測試節點,分別為node5.redhat.com和node6.redhat.com地址分別為172.16.100.5和172.16.100.62.集群服務為httpd,利用nfs做共享存儲,NFS地址為172.16.0.254,NFS已經共享出了一個/www/htdocs目…

    系統運維 2016-04-05
  • 五大主流數據庫模型

    導讀:無論是關系型數據庫還是非關系型數據庫,都是某種數據模型的實現。本文將為大家簡要介紹5種常見的數據模型,讓我們來追本溯源,窺探現在流行的數據庫解決方案背后的神秘世界。 什么是數據模型? 訪問數據庫中的數據取決于數據庫實現的數據模型。數據模型會影響客戶端通過API對數據的操作。不同的數據模型可能會提供或多或少的功能。一般而言,數據模型不會直接提供過多的功能…

    Linux干貨 2015-04-04
  • 一起學DHCP系列(四)安裝、配置

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://jeffyyko.blog.51cto.com/28563/162580       本節將主要講述DHCP的安裝和配置。     …

    Linux干貨 2015-03-25
  • 優云老王(四)干貨總結:數據帶來的奇妙世界

    作為產品經理的我們,不僅僅需要業務敏感的直覺,還需要數據驅動我們的產品不斷創新!關于如何看數據,我列了主要的四個場景。 場景一:看頁面點擊,了解用戶關注什么,卡在哪里 給誰看:產品經理和交互設計師 看什么: 由于我們對Web應用的所有界面,可交互元素都做了埋點,那么我們就可以看用戶在頁面里都做了哪些點擊動作。首先是整個頁面的橫向比較,每個頁面本身的操作數(重…

    2016-09-19
  • linux用戶,組及權限管理

      寫在前面: 本博客詳解命令如下: useradd, userdel,usermod, passwd,  chage, groupadd,  groupdel, groupmod, gpasswd ,newgrp, chsh, id, su,  chmod,  chowm,  chgrp, &nb…

    Linux干貨 2015-12-19
  • Bash 的配置文件

    有時候,在定義了別名 alilas cls=clear  , 或者定義了 umask=033 等等,在logout 用戶后再登錄,會失效,因為這些本地變量,僅對當前shell生效。而要保留配置,使其永久生效,就需要將這些定義的寫入配置文件中保存。下面介紹下bash的配置文件:  Bash的配置文件可以分為: profile類: /etc/…

    Linux干貨 2015-04-04

評論列表(1條)

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

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

欧美性久久久久