
以下は、tldpで見つかったファイルの拡張子を置き換える短いスクリプトです。
#!/bin/bash
Mysterious=65
case $# in
0|1)
echo "Usage: `basename $0` old_file_extension new_file_extension"
exit $Mysterious
;;
esac
for filename in *.$1
do
mv $filename ${filename%$1}$2
done
exit 0
ミステリー変数の値がわかりません。スクリプトの所有者が65を選択した理由は何ですか?0または1で$#ケースを使用する理由は何ですか?値を65から100に変更しましたが、まだ機能します。
答え1
スクリプトを書いた人は、終了ステータスがセキュリティの問題を示す可能性があると誤って信じていたようです。名前parmError
やそのような名前を付けるともっと意味があるでしょう。
スペースや特殊文字もサポートするより良いアプローチは次のとおりです。
#!/bin/bash
if test "$#" -ne 2
then
echo "Usage: $0 old_file_extension new_file_extension"
exit 2
fi
for filename in *."$1"
do
mv "$filename" "${filename%$1}$2"
done
デフォルト値は0なので、返す必要はありません。