作者 主題: shell script 求救  (閱讀 1471 次)

0 會員 與 1 訪客 正在閱讀本文。

zarr12steven

  • SA 苦力組
  • 懷疑的國中生
  • **
  • 文章數: 71
    • 檢視個人資料
shell script 求救
« 於: 2013-12-19 17:39 »
各位大大好:

代碼: [選擇]
#!/bin/bash
src="/backup/test/temp/"
dest1="/backup/test/pickup-primary/1/"
dest2="/backup/test/pickup-backup/321/"
dest3="/backup/test/pickup-primary/46/"
dest4="/backup/test/pickup-backup/89"
while read line
do
if [ -e $src$line ]; then
        echo "exists"
        echo "$src$line to $dest1"
fi
done < $@

我已經將要read line的檔案都存在自已的家目錄底下,總共有四個file.txt,裡面都是存檔案的名字
主要目的是:希望當我去執行這支shell script,$@會把我的家目錄底下的4支file.txt給吃進來時, $dest1會隨著吃完$@時做+1的動作,已達成全自動的目的!


但目前卻只能寫成半自動的,只好每次都進來修改$dest後面這個數字,請問小弟應該如何修改才能寫成全自動?


我執行下面的script, sh -x test.sh  file1.txt file2.txt file3.txt file4.txt,出現: No such file or directory

代碼: [選擇]
#!/bin/bash
src="/backup/test/temp/"
dest1="/backup/test/pickup-primary/1/"
dest2="/backup/test/pickup-backup/321/"
dest3="/backup/test/pickup-primary/46/"
dest4="/backup/test/pickup-backup/89"
while read line
do
if [ -e $src$line ]; then
        echo "exists"
        i=1
        echo "$src$line to $dest$i"
fi
i=$(($i+1))
done < $@

« 上次編輯: 2013-12-19 23:17 由 zarr12steven »
不強就要挨打

hongbin

  • 憂鬱的高中生
  • ***
  • 文章數: 101
    • 檢視個人資料
Re: shell script 求救
« 回覆 #1 於: 2013-12-20 09:40 »
echo "$src$line to $dest$i"  => eval echo "$src$line to \$dest$i"

zarr12steven

  • SA 苦力組
  • 懷疑的國中生
  • **
  • 文章數: 71
    • 檢視個人資料
Re: shell script 求救
« 回覆 #2 於: 2013-12-20 12:28 »
謝謝hongbin大大的指導,小弟已經測試成功了!

附上完成的script

代碼: [選擇]
#!/bin/bash
src="/backup/test/temp/"
dest1="/backup/test/pickup-primary/1/"
dest2="/backup/test/pickup-backup/321/"
dest3="/backup/test/pickup-primary/46/"
dest4="/backup/test/pickup-backup/89"

   i=1
   while read line
   do 
        cat $line | while read item
          do             
                if [ -e $src$item ]; then
                        echo "exists"
                        eval echo "$src$item to \$dest$i"
                fi
          done
        #i=$(( $i+1 ))    ===> 用這個或下面那個都可以執行
        i=`expr $i + 1`
   done  < $1

上面這支主要是要來把特定的檔案搬到相對應的目錄下
小弟是將所有的特定的檔案都各別存成一個test.txt   test1.txt  test2.txt  test3.txt,然後再將text*.txt存成file.txt
然後執行時,就打  sh mv.sh file.txt,就可以跑出我要的結果了。

最後再次感謝hongbin大大!!
« 上次編輯: 2013-12-20 12:33 由 zarr12steven »
不強就要挨打