如何將目錄下的腳本一次性全部執行

大家好,我是良許。

我們在平時工作的時候,爲了測試產品的一些功能,我們會寫一系列的腳本,並且把它們放在同一個目錄下。在做測試的時候,我們通常會依次執行這些腳本,然後記錄測試結果。

這樣做的弊端是顯而易見的,那就是效率太低。如果腳本數不多,你的「時間管理」能力又很強的話,那麼問題不大。但如果腳本數很多,那麼你很可能就有一拳打爆屏幕的衝動(別問我怎麼知道,要不是我的同事拼死拉着,我的屏幕很可能已經爆了好幾塊了)。

本文就給大家介紹三種一次性執行目錄下所有腳本的方法。

1. run-parts

首先推薦一個很實用,但大家不是很熟悉的命令:run-parts 。它的基本用法如下:

$ run-parts option <directory-path>

但是,並不是目錄下所有的腳本都會被執行,還是會有一些命名要求的。腳本的名字滿足以下條件纔會被執行:大/小寫、數字、下劃線(_)、短槓線(-)。

爲了能選出滿足條件的腳本,我們通常需要加上 --regex 選項。假如我們的目錄下有這些腳本:

由於腳本一般是以 .sh 結尾,所以如果你的命名都符合規則的話,想要執行所有腳本的話,可以這樣操作:

$ run-parts --regex 'sh$' .

執行結果:

如果你只想要執行以 s 開頭,sh 結尾的腳本,可以結合如下正則表達式:

$ run-parts --regex '^s.*sh$' .

執行結果:

當然了,你可以根據自己的腳本情況,寫出對應的正則表達式。

爲了防止誤操作,在腳本真正執行之前,可以先看下將被執行的腳本會有哪些。我們可以加上 --list 選項:

$ run-parts --list --regex '^s.*sh$' .

執行結果:

如結果所示,加上 --list 選項後,它只會列出將要執行的腳本,便於你的核對,並不會真正去執行這些腳本。

2. find

但是,run-parts 這個命令還是比較小衆,估計很多人並不知道這個命令,更不用說知道怎麼去使用了。另一個執行目錄下所有腳本的方法是使用 find 命令,這個大家會更熟悉一些。

具體來講,我們可以使用 find 命令來找到目標目錄下所有的腳本,然後再使用 -exec 選項去執行找到的腳本。

$ find ~/scripts -maxdepth 1 -type f -executable -name 's*' -exec {} \;
STAY
HOME
STAY
SAFE

上面的命令是指定了只在 scripts/ 目錄這個層級下找腳本,但是,你還可以去掉這個限制,就可以搜索當前目錄及其子目錄下所有的腳本了:

$ find -maxdepth 1 -type f -executable -name '*.sh' -exec {} \;

3. for

如果你 Shell 的水平不錯的話,那麼 for 循環也是一個不錯的選擇。比如你想執行目錄下所有以 s 開頭的腳本,可以這樣寫:

$ for f in ~/scripts/s* ; do [ -x "$f" ] && [ ! -d "$f" ] && "$f" ; done
STAY
HOME
STAY
SAFE

如果你想執行目錄下所有的腳本,可以做一個小小的改動:

$ for f in ~/scripts/*.sh ; do [ -x "$f" ] && [ ! -d "$f" ] && "$f" ; done
公衆號:良許Linux
hello world!
STAY
HOME
STAY
SAFE

當然了,如果你還想要執行其它腳本,或者有其它需求,可以發揮你的想象,寫出對應的命令來。

最後,最近很多小夥伴找我要Linux學習路線圖,於是我根據自己的經驗,利用業餘時間熬夜肝了一個月,整理了一份電子書。無論你是面試還是自我提升,相信都會對你有幫助!目錄如下:

免費送給大家,只求大家金指給我點個贊!

鏈接:https://pan.baidu.com/s/1_6uniaFV0rdMWIdMwgZjbg
提取碼:9pbc

也希望有小夥伴能加入我,把這份電子書做得更完美!

有收穫?希望老鐵們來個三連擊,給更多的人看到這篇文章

推薦閱讀:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章