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(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 |
<<< Previous | Home | Next >>> |
取用最後一筆歷史記錄中的參數部份 | 參考資源 |