最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

shell腳本編程之for語句、if語句使用介紹

 更新時(shí)間:2013年09月22日 22:03:11   作者:  
這篇文章主要是介紹了shell腳本編程之for語句、if語句的使用方法,學(xué)習(xí)shell編程的朋友可以看下

上部:

面向過程:
順序執(zhí)行
選擇執(zhí)行: if, case
循環(huán)執(zhí)行: for, while, until

一、for語句

  格式:
     for 變量 in 列表;do
        語句1;
        語句2;
        ...
     done
   例1、寫一個(gè)腳本,添加10個(gè)用戶,并讓每個(gè)用戶的密碼同用戶名】

復(fù)制代碼 代碼如下:

       #!/bin/bash
       for I in {1..10}; do
          useradd user$I;
       echo user$I | passwd --stdin user$I
       done

  例2、寫一個(gè)腳本,分別顯示 /tmp/1.dir /tmp/2.dir /tmp/3.dir三個(gè)文件的時(shí)間戳,并將這三個(gè)文件被修改的時(shí)間改為201003030303.03

復(fù)制代碼 代碼如下:

        #!/bin/bash
        for Dir in /tmp/1.dir /tmp/2.dir /tmp/3.dir; do

           stat $Dir
           touch -m -t 201003030303.03 $Dir
           stat $Dir
        done

bash的變量類型:
    本地變量
    局部變量
    環(huán)境變量
    位置變量 :$1、$2、$3、$4....
    特殊變量:
        $?: 用于保存剛剛執(zhí)行的命令的狀態(tài)返回值;
0:成功執(zhí)行;1-255:失敗,1,2,127
可以使用exit命令在腳本中自定義腳本執(zhí)行狀態(tài)返回值;如果不定義,腳本執(zhí)行狀態(tài)返
回值取決于腳本執(zhí)行結(jié)束前最后執(zhí)行的那個(gè)語句的狀態(tài);

       $@, $*: 所有位置參數(shù);
       $#: 位置參數(shù)的個(gè)數(shù);
       $0: 腳本名稱

二、if語句

1、單分支if語句:
      格式:
          if 條件; then
語句1
語句2
  ...
           fi
     例3、寫一個(gè)腳本,實(shí)現(xiàn)如下功能: 如果用戶存在,就說明其存在;

復(fù)制代碼 代碼如下:

#!/bin/bash
   UserName=user1
 if grep "^$UserName\>" /etc/passwd &> /dev/null; then
    echo "$UserName exists."
 fi

    例4、寫一個(gè)腳本,實(shí)現(xiàn)如下功能:如果設(shè)備/dev/sda3已經(jīng)掛載,就顯示其掛載點(diǎn);
復(fù)制代碼 代碼如下:

#!/bin/bash
Device='/dev/sda3'
if mount | grep "^$Device" &> /dev/null; then
   mount | grep "/dev/sda3" | cut -d' ' -f3
fi

例5、寫一個(gè)腳本,實(shí)現(xiàn)如下功能: 如果/etc/rc.d/rc.sysinit中有空白行,就顯示其空白行數(shù);

復(fù)制代碼 代碼如下:

    #!/bin/bash
     File='/etc/rc.d/rc.sysinit'
    if grep "^$" $File &> /dev/null; then
     grep "^$" $File | wc -l
    fi

2、雙分支if語句:

  格式:
   if 條件; then
 語句1
 語句2
 ...
else
 語句1
 語句2
 ...
fi

   例6、寫一個(gè)腳本,實(shí)現(xiàn)如下功能:

     如果設(shè)備/dev/sda3已經(jīng)掛載,就顯示其掛載點(diǎn);否則,就說明其未掛載或設(shè)備不存在;

復(fù)制代碼 代碼如下:

        #!/bin/bash
          Device='/dev/sda3'
        if mount | grep "^$Device" &> /dev/null; then

           mount | grep "/dev/sda3" | cut -d' ' -f3
        else
          echo "$Device not mounted or not exist."
        fi

3、多分支if語句:
    格式:
    if 條件1; then
 語句1
 語句2
 ...
elif 條件2; then
 語句1
 語句2
 ...
elif 條件3; then
 語句1
 語句2
 ...
else
 語句1
 語句2
 ...
fi
   例7、寫一個(gè)腳本:
      判斷當(dāng)前主機(jī)的CPU生產(chǎn)商,其信息在/proc/cpuinfo文件中vendor id一行中。
      如果其生產(chǎn)商為GenuineIntel,就顯示其為Intel公司;
      如果其生產(chǎn)商為AuthenticAMD,就顯示其為AMD公司;
     否則,就顯示無法識(shí)別;

復(fù)制代碼 代碼如下:

    #!/bin/bash
       Vendor=`grep "vendor_id" /proc/cpuinfo | uniq | cut -d: -f2`
       if [[ $Vendor =~ [[:space:]]*GenuineIntel$ ]]; then

         echo "intel"
       elif [[ $Vendor =~ [[:space:]]*AuthenticAMD$ ]]; then
         echo "AMD"
       else
         echo "Unknown"
       fi

下部:

一、bash條件測(cè)試:
     整數(shù)測(cè)試   [ expression ]
     字符測(cè)試     [[ expression ]]
     條件測(cè)試     test expression   test 根據(jù)表達(dá)式求值的結(jié)果返回 0(真)或 1(假)

1、整數(shù)測(cè)試:數(shù)值比較
         -gt   大于
         -ge   大于或等于
         -eq   等于
         -lt   小于
         -le   小于或等于
         -ne    不等于

例1:寫一個(gè)腳本,生成兩個(gè)隨機(jī)數(shù),比較其大?。伙@示大數(shù);

bash有個(gè)內(nèi)置變量:$RANDOM

復(fù)制代碼 代碼如下:

#!/bin/bash
  A=$RANDOM
  B=$RANDOM
if [ $A -ge $B ]; then
  echo "Max number is $A."
else
  echo "Max number is $B."
fi

例2:寫一腳本,隨機(jī)生成一個(gè)整數(shù),判定,顯示其奇偶性;

復(fù)制代碼 代碼如下:

#!/bin/bash
#
A=$RANDOM
if [ $[$A%2] -eq 0 ]; then
  echo "$A: Even"
else
  echo "$A: Odd"
fi

例3、寫一個(gè)腳本:

計(jì)算100以內(nèi)所有奇數(shù)的和以及所有偶數(shù)的和;分別顯示之;

復(fù)制代碼 代碼如下:

#!/bin/bash
EvenSum=0
OddSum=0
for I in {1..100}; do
  if [ $[$I%2] -eq 0 ]; then
    EvenSum=$[$EvenSum+$I]
  else
    OddSum=$[$OddSum+$I]
  fi
done
echo "EvenSum is: $EvenSum. OddSum is: $OddSum."

例4、計(jì)算N以內(nèi)所有奇數(shù)的和以及所有偶數(shù)的和;分別顯示之;N是通過參數(shù)傳遞過來的正整數(shù);

復(fù)制代碼 代碼如下:

#!/bin/bash
EvenSum=0
OddSum=0
for I in `seq 1 $1`;do
  if [ $[$I%2] -eq 1 ]; then
    OddSum=$[$OddSum+$I]
  else
    EvenSum=$[$EvenSum+$I]
  fi
done
echo "EvenSum: $EvenSum."
echo "OddSUm: $OddSum."
echo "Sum: $[$EvenSum+$OddSum]"

例5、寫一個(gè)腳本,完成以下要求:

     1、添加10個(gè)用戶user1, user2, ..., user10;但要先判斷用戶是否存在,不存在而后再添加;
     2、添加完成后,顯示一共添加了幾個(gè)用戶;當(dāng)然,不能包括因?yàn)槭孪却嬖诙鴽]有添加的;
     3、最后顯示當(dāng)前系統(tǒng)上共有多少個(gè)用戶;

復(fù)制代碼 代碼如下:

#!/bin/bash
Count=0
for I in {1..10}; do
  if id user$I &> /dev/null; then
    echo "user$I exists."
  else
    useradd user$I
    echo "Add user$I successfully."
    Count=$[$Count+1]
  fi
done
echo "Add $Count new users."
echo "Total users: `wc -l /etc/passwd | cut -d' ' -f1`."

2、bash字符測(cè)試:
       >: 大于
       <: 小于
      ==: 等于
      =~: 判斷左邊的字符串是否能夠被右邊的模式所匹配;通常用于[[]];
         [[ $opt1 =~ $opt2 ]]一般做行首、行尾錨定;不要加引號(hào)
 單目:
     -z $STRING: 為空則為真,不空則為假;
     -n $STRING: 為空則為假,不空則真;

例6、寫一個(gè)腳本,判定用戶的shell是否為bash;

復(fù)制代碼 代碼如下:

#!/bin/bash
Shell=`grep "^$1:" /etc/passwd | cut -d: -f7`
if [ "$Shell" == "/bin/bash" ]; then
  echo "Bash User."
  Ret=0
else
  echo "Not Bash User."
  Ret=9
fi
exit $Ret

例7、根據(jù)用戶shell的結(jié)束符是否為sh來判定其是否為登錄用戶:

復(fù)制代碼 代碼如下:

#!/bin/bash
Shell=`grep "^$1:" /etc/passwd | cut -d: -f7`
if [ -z $Shell ]; then
  echo "No shell."
  exit 3
fi
if [[ "$Shell" =~ sh$ ]]; then
  echo "Login User."
  Ret=0
else
  echo "None Login User."
  Ret=4
fi
exit $Ret

二、bash測(cè)試之文件測(cè)試:

    操作符 文件路徑
       -f: 測(cè)試其是否為普通文件,即ls -l時(shí)文件類型為-的文件;
       -d: 測(cè)試其是否為目錄文件,即ls -l時(shí)文件類型為d的文件;
       -e: 測(cè)試文件是否存在;存在為真,否則為假;
       -r: 測(cè)試文件對(duì)當(dāng)前用戶來說是否可讀;
       -w: 測(cè)試文件對(duì)當(dāng)前用戶來說是否可寫;
       -x: 測(cè)試文件對(duì)當(dāng)前用戶來說是否可執(zhí)行;
       -s: 測(cè)試文件大小是否不空,不空則真,空則假;
短路操作:只要前半段已經(jīng)可以決定最終結(jié)果,后半段就不再運(yùn)算;
 與運(yùn)算:
   真 && 真 =  真
   真 && 假 =  假
   假 && {真|假} = 假


 或運(yùn)算:
   假 || 0 = 0
   假 || 1 = 1
   真 ||   =1

例8、給定一個(gè)路徑,判斷如果為普通文件,顯示之;如果為目錄,顯示之;
      否則,說無法識(shí)別;

復(fù)制代碼 代碼如下:

#!/bin/bash
if [ ! -e $1 ]; then
  echo "No such file."
  exit 7
fi
if [ -f $1 ]; then
  echo "Common file."
elif [ -d $1 ]; then
  echo "Directory."
else
  echo "Unknown file."
fi

綜合例子:
寫一個(gè)腳本:可以接受一個(gè)參數(shù),其使用形式如下:
script.sh {start|stop|restart|status}
如果參數(shù)為start,創(chuàng)建空文件/var/lock/subsys/script,并顯示“Starting script successfully.”;
如果參數(shù)為stop,則刪除文件/var/lock/subsys/script,并顯示“Stop script finished.”;
如果參數(shù)為restart,則刪除文件/var/lock/subsys/script后重新創(chuàng)建,并顯示“Restarting script successfully.”;
如果參數(shù)為status,那么:
如果/var/lock/subsys/script文件存在,則顯示為“script is running.”
否則,則顯示為“script is stopped.”
其它任何參數(shù):則顯示“script.sh {start|stop|restart|status}”

復(fù)制代碼 代碼如下:

#!/bin/bash
if [ $1 == start ] ;then
   touch /var/lock/subsys/script
   echo "Starting script successfully."
 elif [ $1 == stop ] ; then
    rm -f /var/louk/subsys/script
    echo "Stop script finished."
 elif [ $1 == restart ];then
     rm -f /var/louk/subsys/script
     touch  /var/lock/subsys/script
    echo "Restarting script successfully."
  elif [ $1 == status ];then
     [ -e /var/lock/subsys/script ]&& echo "script is running." || echo "script is stopped."
 else
   echo "script.sh {start|stop|restart|status}"
fi

相關(guān)文章

  • 一文掌握Linux命令lsscsi

    一文掌握Linux命令lsscsi

    想要弄明白lsscsi命令,首先我們必須搞清楚什么是SCSI,以及常見的硬盤接口,常用的硬盤參數(shù),今天通過本文給大家介紹下Linux命令lsscsi,需要的朋友可以參考下
    2022-09-09
  • linux?shell字符串截取的詳細(xì)總結(jié)(實(shí)用!)

    linux?shell字符串截取的詳細(xì)總結(jié)(實(shí)用!)

    在開發(fā)的時(shí)候經(jīng)常會(huì)自行寫一些小的腳本,其中就用到截取字符串的操作,這篇文章主要給大家介紹了關(guān)于linux?shell字符串截取的詳細(xì)方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • linux 檢測(cè)遠(yuǎn)程端口是否打開方法總結(jié)

    linux 檢測(cè)遠(yuǎn)程端口是否打開方法總結(jié)

    這篇文章主要介紹了linux 檢測(cè)遠(yuǎn)程端口是否打開方法總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • ps命令輸出進(jìn)程狀態(tài)S+的含義解析

    ps命令輸出進(jìn)程狀態(tài)S+的含義解析

    這篇文章主要介紹了ps命令輸出進(jìn)程狀態(tài)S后面加號(hào)的含義,本文通過ps命令輸出說明,感興趣的朋友跟隨小編一起看看吧
    2019-12-12
  • Linux系統(tǒng)如何修改防火墻配置

    Linux系統(tǒng)如何修改防火墻配置

    這篇文章主要介紹了Linux系統(tǒng)如何修改防火墻配置,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 利用Shell解析處理XML的方法匯總

    利用Shell解析處理XML的方法匯總

    這篇文章主要給大家總結(jié)介紹了關(guān)于利用Shell解析處理XML的方法,分別介紹了關(guān)于xmlint、xpath和xml2三種工具的使用,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • linux 下同名符號(hào)沖突問題解決方案

    linux 下同名符號(hào)沖突問題解決方案

    這篇文章主要介紹了 linux 下同名符號(hào)沖突問題解決方案的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 在Shell中分割字符串的例子

    在Shell中分割字符串的例子

    這篇文章主要介紹了在Shell中分割字符串的例子,使用3種方法實(shí)現(xiàn),需要的朋友可以參考下
    2014-06-06
  • Linux啟動(dòng)過程詳細(xì)介紹

    Linux啟動(dòng)過程詳細(xì)介紹

    這篇文章主要介紹了Linux啟動(dòng)過程詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • linux shell內(nèi)置判斷語句

    linux shell內(nèi)置判斷語句

    內(nèi)置判斷,成功的時(shí)候返回0,不成功返回非零。接下來通過本文重點(diǎn)給大家介紹linux shell內(nèi)置判斷語句,感興趣的的朋友一起看看吧
    2017-08-08

最新評(píng)論

孝昌县| 卓资县| 扶风县| 灵川县| 万全县| 洪泽县| 临湘市| 金川县| 双辽市| 宜兰县| 中超| 朝阳市| 正蓝旗| 囊谦县| 红河县| 华阴市| 安化县| 新蔡县| 宝山区| 晋州市| 甘泉县| 丰城市| 漳州市| 宿松县| 五家渠市| 峡江县| 海淀区| 桃园市| 炎陵县| 赣榆县| 宝坻区| 潍坊市| 鄯善县| 哈尔滨市| 汉阴县| 安乡县| 玉屏| 平度市| 读书| 凌源市| 古丈县|