實例

1. 將大寫檔名改成小寫 或 將小寫檔名改成大寫

#! /bin/sh
#
# 將大寫檔名改成小寫檔名 或 將小寫檔名改成大寫檔名
# 至於使用那一個功能, 完全由執行時的檔名來決定
#
# 這支程式本身不會被改名
#
# 安裝法: 
# 1. cp low2upper /usr/local/bin
# 2. cd /usr/local/bin
# 3. ln -sf low2upper upper2low
#
# Copyright 2002 OLS3(ols3@www.tnc.edu.tw)

# 
# Functions
#
# low2upper : 將小寫檔名改成大寫檔名
# upper2low : 將大寫檔名改成小寫檔名
#

low2upper () {
   for FILE in *
   do
      if [ "$FILE" != "$LFNAME" -a "$FILE" != "$UFNAME" ]; then
          mv -i "$FILE" `echo "$FILE" | tr '[a-z]' '[A-Z]'` 2> /dev/null
      fi
   done
}

upper2low () {
   for FILE in *
   do
      if [ "$FILE" != "$LFNAME" -a "$FILE" != "$UFNAME" ]; then
          mv -i "$FILE" `echo "$FILE" | tr '[A-Z]' '[a-z]'` 2> /dev/null
      fi
   done
}

# -----------------------------------------------------------------------------

#
# main
#

LFNAME=low2upper
UFNAME=upper2low
NOWFILENAME=`basename $0`

if [ "$NOWFILENAME" = "$LFNAME" ]; then
  low2upper
elif [ "$NOWFILENAME" = "$UFNAME" ]; then
  upper2low
fi

echo 
echo "Done!"
echo

2. 找出網路卡的 IP (請用 root 權限來執行)

#! /bin/sh

# @(#)fip.sh
#
# $Id$
# $Author$
#
# Copyright (C) 2002 by OLS3 All rights reserved
#

# 取得 IP 最終版

interface="$1"

if [ -z "$interface" ]; then
    echo "Usage: $0 [eth0/eth1...]"
else
    if dmesg | grep -q "$interface"; then
	ifconfig "$interface" | sed -n 's/inet addr://p' | awk '{ print $1 }'
    else
	echo "$interface not found!"
    fi
fi


# 為何 if dmesg | grep -q "$interface"; then 不寫成

# if [ dmesg | grep -q "$interface" ]; then

# 因為 if dmesg | grep -q "$interface" 就會傳回 0 或非 0 之值, 不必再用 [ ] 來測試

3. 5-1/5-2 習題參考解答: 簡易樂彩程式

#! /bin/sh

# 取得一個 1 ~ 42 的號碼
function GetLOTO () {
   r=$(( $RANDOM % 43 ))

   # 若該號為 0, 則予以加 1
   if [ $r -eq 0 ]; then
   	r=$[ r + 1 ]
   fi

   # 使每一個號碼都用二位數來表示,不足 10 者,在其前面補 0
   if [ $r -le 9 ]; then
   	echo "0$r"
   else
        echo $r
   fi
}


function GenNumAndCheckRepeat () {
        # 取得 6 個號碼,並且予以排序
	m=`{ GetLOTO;  GetLOTO;  GetLOTO;  GetLOTO;  GetLOTO;  GetLOTO; } | sort -n`
        
        # 把這 6 個號碼暫時 copy 一份給 n
        n="$m"

        # 檢查這 6 個號碼有無重覆
        n=`echo $n | tr ' ' '\n' | uniq -d`

        # 若 $n 為空, 表示沒有重覆, 則傳回真 ( 0 )
	if [ -z "$n" ]; then
		return 0
        else
        # 若 $n 非空, 表示有重覆, 則傳回假 ( 1 )
		return 1
        fi
}

if [ $# -ne 1 ]; then
   echo "使用法: $0 組數"
   exit
fi


if [ "$1" -lt 1 -o "$1" -gt 99 ]; then
   echo "使用法: $0 [1-99]組"
   exit
fi


i=1
while [ $i -le "$1" ]
do
        # 取得 6 個號碼
	GenNumAndCheckRepeat

        # 若有重覆,則丟棄這 6 個號碼
	if [ $? -ne 0 ]; then
  		 continue
	fi

        # 調整輸出格式
        j=$i
        if [ $j -le 9 ]; then
        	echo -n "第 0$j 組: "
        else
        	echo -n "第 $j 組: "
        fi

        # 執行到此,表示該組號碼沒有重覆,予以顯示出來
        echo $m
 
        # 組數 加 1 
        i=$[ i + 1 ]
done