| Shell 設計入門: | ||
|---|---|---|
| <<< Previous | Next >>> | |
1. 將大寫檔名改成小寫 或 將小寫檔名改成大寫
#! /bin/sh # # 將大寫檔名改成小寫檔名 或 將小寫檔名改成大寫檔名 # 至於使用那一個功能, 完全由執行時的檔名來決定 # # 這支程式本身不會被改名 # # 安裝法: # 1. cp low2upper /usr/local/bin # 2. cd /usr/local/bin # 3. ln -sf low2upper upper2low # # Copyright 2002 OLS3([email protected]) # # 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 |
| <<< Previous | Home | Next >>> |
| 取用最後一筆歷史記錄中的參數部份 | 參考資源 |