天天看點

6.1 shell程式設計4

6.1

給定一個使用者,判斷其UID和GID是否一樣 "^$USERNAME\>"(行首第一個單詞)

如果一樣,就顯示此使用者為"good guy";否則,就顯示此使用者為"bad guy"

#!/bin/bash

#

USERNAME =user1

if !grep "^$USERNAME\>" /etc/passwd &> /dev/null;then 使用者不存在

  echo "No such user: $USERNAME."

  exit 1

fi

USERID = `id -u $USERNAME`

GROUPID =`id -g $USERNAME`

if[ $USERID -eq $GROUPID ];then

  echo "good guy"

else

  echo "bad guy"

exit: 退出腳本

exit #(#代表數字)

bash中常用的條件測試三種

   -gt

   -le

   -ne

   -ge

   -lt 

   -eq               非0值都是假

 --------------------隻有上面才能用[],其他表達式中不能出現[]

INT1 = 63

INT2 = 77

[ $INT1 -eq $INT2 ]

[[ $INT1 -eq $INT2 ]]

TEST $INT1 -eq $INT2

if [ `grep "^$USENAME\>" /etc/passwd | cut -d: -f3` -eq 0 ];then 對

if [ `grep "^$USENAME\>" /etc/passwd ` -eq 0 ];then 錯(前面是一行)

測試方法

[ expression ]  bash的指令

` expression ` bash關鍵字  

test expression

檔案測試:

-e FILE:測試一個檔案是否存在

-f FILE:測試檔案是否為普通檔案

-d FILE: 測試指定路徑是否為目錄的

-r FILE: 測試目前使用者對指定檔案是否有讀取權限

-w

-x FILE

[ -e /etc/initttab ]

[ -x /etc/rc.d/rc.sysinit ]

練習:寫一個腳本

給定一個檔案,比如/etc/inittab

判斷這個檔案中是否有空白行

如果有,則顯示其空白行數,否則,顯示沒有空白行

FILE = /etc/inittab

if [! -e $FILE ];then

  echo "No $FILE."

  exit 8

if grep "^$" $FILE &> /dev/null;then

  echo "Total blank lines: `grep "^$" $FILE | wc -l`."

else 

  echo "No blank line."

圓整,丢棄小數點後的内容

expr指令一般用于整數值

#expr argument operator argument

練習:編寫一個腳本

給定一個使用者,擷取其密碼警告期限:

而後判斷使用者最近一次修改密碼時間距今天是否已經小于警告期限

   提示:算術運算的方法$[$A-$B]:表示變量A的值減去變量B的值的結果

如果小于,則顯示"Warning":否則,就顯示"OK"

W=`grep "student" /etc/shadow | cut -d: -f6`

S=`date +%s`

T=`expr $S/86400`

L=`grep "^student" /etc/shadow | cut -d: -f5`

N=`grep "^student" /etc/shadow | cut -d: -f3`

SY=$[$L-$[$T-$N]]

if [ $SY -lt $W ];then

  echo 'Worning'

  echo 'OK'

判讀指令曆史中曆史指令的總條目是否大于1000;如果大于,則顯示

   "Some command will gone.";否則顯示"ok"

history 目前顯示緩沖區中的條數(會大于1000)

$HISTSIZE  都隻顯示1000

$HISTFILESIZE  都隻顯示1000

history | tail -l | cut -d' ' -f1 由于前面有一個空格,取不出條數,當取第二個字段

history | tail -l | cut -d' ' -f2

COUNT = history | tail -l | cut -d' ' -f2

if $COUNT -gt 1000 ;then

  echo "Some command will gone."

  echo "ok"

多分支的if語句

if 判斷條件1;then

   statement1

   ...

elif  判斷條件2;then

   statement2

elif  判斷條件3;then

   statement3

else 判斷條件4;then

   statement4

FILE =/etc/inittab

if [ -e $FILE ];then

  echo "OK"

  echo "No such file"

測試腳本是否有文法錯誤

bash -n filetest.sh 

bash -x 腳本:單步執行

給定一個檔案,如果是一個普通檔案,就顯示之

如果是一個目錄,亦顯示之

否則,此為無法識别之檔案

filetest2.sh

FILE = /etc/rc.d/rc.sysinit

if [ ! -e $FILE ];then

  echo "NO such file"

  exit 6

if [ -f $FILE ];then

  echo "Common file"

elif [ -d $FILE ];then

  echo "Directory"

  echo "Unkown."

定義腳本退出狀态碼

如果腳本沒有明确定義退出狀态碼,那麼,最後執行的一條指令

    的退出碼即為腳本的退出狀态碼

bash變量的類型:

  本地變量(局部變量) 目前shell程序

  環境變量 目前shell程序及其子程序

  位置變量:$1 $2 ...

            shift(踢掉一個位置值)預設踢1個

            shift [n]踢掉n個

  特殊變量 $?

           $#:參數的個數

           $*:參數清單

           $@:參數清單

./filetest.sh /etc/fstab /etc/inittab

$1:/etc/fstab

$2:/etc/inittab

能接受一個參數(檔案路徑)

判定:此參數如果是一個存在的檔案,就顯示OK ,否則顯示No such file

echo $#

echo $*

echo $@

if[ $# -lt 1 ];then

  echo "Usage: ./filetest3.sh ARG1 [ARG2 ...]"

if [ -e $1 ];then

給腳本傳遞兩個參數(整數)

顯示此兩個參數之和,之乘積

if [ $# -lt 2 ];then

   echo "Usage: cac1.sh ARG1 ARG2"

   exit

echo "The sum is : $[$1 + $2]."

echo "The prod is : $[$1 * $2]."

本文轉自飛行萌51CTO部落格,原文連結:http://blog.51cto.com/8527508/1941157 ,如需轉載請自行聯系原作者