2010-07-10 653 views
3

如何在Unix shell中循環命令/程序,而無需將循環寫入腳本或其他應用程序。使用腳本在shell中執行命令循環

例如,我編寫了一個腳本,輸出一個光傳感器值,但我現在仍在測試它,所以我希望它通過反覆運行可執行文件在循環中運行它。

也許我還想在循環中運行「ls」或「df」。我知道我可以在幾行bash代碼中輕鬆完成此操作,但是能夠在終端中爲任何給定的命令組鍵入命令對我來說同樣有用。

回答

5

您可以在一行寫它把分號,而不是回報,就像

for NAME [in LIST ]; do COMMANDS; done 

在這一點上,你可以寫稱爲shell腳本編寫,你會在一個shell腳本編寫完全相同的循環,例如,repeat,給定一個命令,運行它N次,通過簡化更改COMMANDS$1

+0

謝謝,我選擇了無限的同時:while [1];做sudo ./sensorTest.py;完成 – cdated 2010-07-10 22:54:13

1

除了接受參數之外,您可以在命令行中完成任何可以在腳本中執行的操作。早些時候,我直接在來砸鍵入此觀看目錄填滿我傳送的文件:

while sleep 5s 
do 
    ls photos 
end 
2

這並不完全回答你的問題,但我覺得這是relavent。 shell循環的優點之一是某些命令會返回項目列表。當然,這是顯而易見的,但是你可以使用for循環來做的事情是在該列表中執行一個命令。

for $file in `find . -name *.wma`; do cp $file ./new/location/ done; 

你可以變得富有創意,並做一些非常強大的東西。

+0

這是一個強大的技術,但如果文件名中有空格,則失敗。另外,在你的例子中'{}'沒有意義。你需要一個變量:'用於$ list中的項目;做回聲「$ item」; done' – 2010-07-11 00:48:13

+0

find是一個不好的例子,因爲它的'-exec'參數和for循環做了同樣的事情,但是以一種空間友好的方式。不過,這是一種很棒的技術,我經常使用它。 – Benson 2010-07-11 04:29:36

2

我推薦使用「watch」,它只是按照你想要的做,並且在每次執行命令前清理終端,所以很容易監控變化。

您可能已經擁有它了,只需試一試watch lswatch ./my_script.sh即可。您甚至可以使用-n選項控制每次執行之間的等待時間(以秒爲單位),並且可以使用-d突出顯示連續運行輸出的差異。

嘗試:

運行LS每一秒:

watch -n 1 ls 

運行my_script.sh每3秒,並突出顯示差異:

watch -n 3 -d ./my_script.sh 

觀看節目手冊頁: http://linux.die.net/man/1/watch