天天看點

shell特殊用法

特殊用法一  while

文法格式    

    while read LINE; do

    循環體

    done < /PATH/FROM/SOMEFILE

        功能:依次讀取/PATH/FROM/SOEMFILE檔案中的每一行,且将此行指派給LINE變量中

  示例:掃描/etc/passwd檔案每一行,如發現GECOS字段為空,則填充使用者名和機關電話為123,并提示該使用者的GECOS資訊修改成功

#!/bin/bash
#
FILE=/etc/passwd
while read LINE; do
  GE=`echo $LINE | cut -d: -f5`
  USER=`echo $LINE | cut -d: -f1`
  if [[ -z $GE ]]; then
    usermod -c "${USER}123" $USER
    echo "Modify $USER finished.."
  else
    echo "$USER can't modify"
  fi

done < $FILE

unset FILE GE USER      

特殊用法二 for

文法格式

    for ((控制變量初始化;條件判斷表達式;控制變量的修正表達式)); do

    done

        功能:指派判斷和修正條件都是(())中完成,滿足判斷表達式即執行一次循環體,結束會先進行控制變量修正運算,而後再做條件判斷。

        此用法和while很相似,完全可以完全替換,但是此用法更适合于數字的計算。

  示例:計算1-10之和

#!/bin/bash

declare -i sum=0
for (( i=1; i<=10; i++ )); do
  sum=$[sum+i]
done

echo $sum

unset sum i      

特殊用法三  select

    select variable in list; do

    循環體指令

        功能:select循環主要用于建立菜單,并顯示PS3 提示符,且使用者輸入被儲存在内置變量REPLY 中。一般與case同用,exit退出循環

#!/bin/bash

PS3="What would you like:"
select menu in noodles dumpling rice; do
  case $menu in
    noodles)
      echo "Your choice is $REPLY,10$"
      ;;
    dumpling)
      echo "Your choice is $REPLY,15$"
      ;;
    rice)
      echo "Your choice is $REPLY,20$"
      ;;
    *)
      echo "Your choice is error.."
      break
    ;;
  esac
done