[英]Bash how check if an argument is a sed patterns?
我正在開發一個bash腳本,該腳本應該接收許多參數。 這些參數可能很簡單,例如:
Myscript [-r] [-l|-u] <dir/file names...>
或者它可能只是給定的sed模式,而不是像這樣的簡單參數:
Myscript <sed pattern> <dir/file names...>
所以我的問題是如何檢查給定的參數是否為sed模式而不是目錄路徑或文件名? 我做了一些事情,但對於長路徑( dir1/dir2/dir
)無效
while [[ $# > 0 ]]
do
key="$1"
case $key in
-ru|-ur)
config_recusive
config_upper
shift
;;
-rl|-lr)
config_recusive
config_lower
shift
;;
-r)
config_recusive
shift
;;
-l)
config_lower
shift
;;
-u)
config_upper
shift
;;
*)
check="^.*/.*/.*$"
if [[ $key =~ $check ]] ; then
config_sed_pattern
else
TARGET=$key
fi
shift
;;
esac
done
更清楚地說,這是我嘗試以這種方式運行腳本時遇到的問題的示例:
./myscript -u tmp/users/regions
以路徑( tmp/users/regions
)作為sed模式感到困惑。 希望我足夠清楚。 等待您的幫助:)謝謝
我認為您可以使用try在某些地方運行該腳本
echo a | sed "$pattern" >/dev/null 2>/dev/null
然后檢查$?
if [ $? != 0 ]; then # means sed failed
#...
但也許sed也會認為這也是它的理由。
順便說一句,使用getopt
處理參數將使事情變得更容易。
我認為您設計參數格式的方式不好。 也許您認為以不同形式編寫參數可能會使您的程序看起來動態而又很棒。 但是現在您正試圖解決問題,這與您的認真工作無關,並且浪費了自己和我們的時間。 這不好。 最好使事情變得愚蠢和清晰。
在您的情況下,也許您可以添加另一個參數以顯示它后面是一個sed表達式。
YourScript -e <sed expr> <others>
這樣,您就會對兩周后所做的事情有所了解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.