2010年5月11日 星期二

5/12 Linux--SHELL Homewrk3

<1>設計一個名為addfiles的script,可自命令列讀取參數產生檔案allfile,如下,
每加入一個檔案,隔2秒,如果重覆執行,則覆蓋原檔案。
 
#!/bin/bash
allfile=$1

rm -f $allfile
touch $allfile
shift
for x in $@
do
date +%F\ %T >> $allfile
cat $x >> $allfile
sleep 2
done

cat $allfile

#一開始嘗試直接用$1去寫 但會出現錯誤 
exit 0 
 
 
<2>設計一個名為mycal的script,使其可以接收三個數字參數,第一、三個參數為數字
,第二個參數為運算子(+-*/其中之一)配合case命令,計算數字運算的結果,並將其結
果顯示出來,如果參數個數不夠或太多,就不執行運算,而顯示一段訊息,提示出正確
的執行方式。如果中間的運算子是/,而第三個參數是0,則顯示除數不可為0
   將各個運算功能分別寫成函數。
 
 
#!/bin/bash

aaa()
{
 echo `expr $1 $2 $3 `
}

case "$2" in
"+")
aaa $1 $2 $3
;;
"-")
aaa $1 $2 $3
;;
"*")
echo `expr $1 \* $3`
;;
"/")
if [ $3 -eq 0 ]
then 
echo 無法計算:除數不可為0
else 
aaa $1 $2 $3
fi
;;
  
esac

exit 0 
 
<3>設計一個名為manymaxmin的script,使其可以接收不固定的多個數字參數,顯示數
字中最大的及最小的,如果都一樣大,則顯示都一樣大。 
#!/bin/bash

max="$1"
min="$1"

for x in $@
do
  if [ $x -gt $max ]
  then
  max=$x
  else
    if [ $x -lt $min ]
    then 
     min=$x
    else
continue
fi
fi
done

echo "max=$max"
echo "min=$min"

if [ $max -eq $min ]
then
echo "equal"
fi

exit 0
 
<4>設計一個名為createmyfiles的script,以迴圈配合touch指令,產生十個檔案,
檔名分別為myprog1.c,myprog2.c,...,myprog10.c。 
 
 #!/bin/bash

for ((x=1;x<=10;x++))
do
touch myprog$x.c
done

exit 0
 
 
<5>設計一個名為lastfiles的script,顯示目前目錄中最近被修改的n個檔案檔名。
 #!/bin/bash

ls -t |head -$1 |nl

exit 0
 
 
<6>設計一個名為mvfiles的script,可以將所有副檔名為.c檔案,副檔名更名為.cpp,
更名前後的副檔名均自命令列輸入。 並將更名的結果顯示出來。
#!/bin/bash

for file in *$1
do
  mv $file `basename $file $1`$2
  echo "renamed $file to `basename $file $1`$2"
done
exit 0
後面兩次的shell真的還滿難的 得再多花點時間練習
加油加油! 

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。