1. ホーム
  2. validation

[解決済み] Bashスクリプトのパラメータを検証する

2022-12-01 23:49:51

質問

不要になったフォルダを削除するプロセスを自動化するための、基本的なものを思いつきました。

#!/bin/bash
rm -rf ~/myfolder1/$1/anotherfolder
rm -rf ~/myfolder2/$1/yetanotherfolder
rm -rf ~/myfolder3/$1/thisisafolder

このように呼び出されます。

./myscript.sh <{id-number}>

問題は、入力し忘れると id-number を入力し忘れることです (ちょうどその時私がそうだったように)。 を実行すると、本当に削除されたくない多くのものが削除される可能性があります。

コマンドラインパラメータに何らかの形で検証を加える方法はありますか?

コマンドライン 私の場合、スクリプトを続ける前に、a) 1つのパラメータがあること、b) それが数値であること、c) そのフォルダが存在することを確認するのがよいでしょう。

どのように解決するのですか?

#!/bin/sh
die () {
    echo >&2 "$@"
    exit 1
}

[ "$#" -eq 1 ] || die "1 argument required, $# provided"
echo $1 | grep -E -q '^[0-9]+$' || die "Numeric argument required, $1 provided"

while read dir 
do
    [ -d "$dir" ] || die "Directory $dir does not exist"
    rm -rf "$dir"
done <<EOF
~/myfolder1/$1/anotherfolder 
~/myfolder2/$1/yetanotherfolder 
~/myfolder3/$1/thisisafolder
EOF

編集 : 最初にディレクトリが存在するかどうかをチェックする部分を見逃していたので、それを追加してスクリプトを完成させました。また、コメントで指摘された問題にも対処しました。正規表現を修正し、からに切り替えました。 ==eq .

これは、私が知る限り、移植可能な POSIX 準拠のスクリプトであるべきで、bashisms を一切使用していません。 /bin/sh は Ubuntu 上では実際には dash ではなく、最近は bash .