このシェルスクリプトをどのように短縮できますか?
CODE="A"
if test "$CODE" = "A"
then
PN="com.tencent.ig"
elif test "$CODE" = "a"
then
PN="com.tencent.ig"
elif test "$CODE" = "B"
then
PN="com.vng.pubgmobile"
elif test "$CODE" = "b"
then
PN="com.vng.pubgmobile"
elif test "$CODE" = "C"
then
PN="com.pubg.krmobile"
elif test "$CODE" = "c"
then
PN="com.pubg.krmobile"
elif test "$CODE" = "D"
then
PN="com.rekoo.pubgm"
elif test "$CODE" = "d"
then
PN="com.rekoo.pubgm"
else
echo -e "\a\t ERROR!"
echo -e "\a\t CODE KOSONG"
echo -e "\a\t MELAKUKAN EXIT OTOMATIS"
exit
fi
ベストアンサー1
ステートメントの使用case
(移植可能、同様のシェルで動作sh
):
case "$CODE" in
[aA] ) PN="com.tencent.ig" ;;
[bB] ) PN="com.vng.pubgmobile" ;;
[cC] ) PN="com.pubg.krmobile" ;;
[dD] ) PN="com.rekoo.pubgm" ;;
* ) printf '\a\t%s\n' 'ERROR!' 'CODE KOSONG' 'MELAKUKAN EXIT OTOMATIS' >&2
exit 1 ;;
esac
CODE
また、変数名をすべて大文字(たとえば)から小文字または大文字と小文字の混合(たとえば、またはcode
)Code
に変更することをお勧めします。特別な意味を持つ大文字の名前がたくさんあり、そのうちの1つを誤って再利用すると問題が発生する可能性があります。
追加の注意:標準ルールは、「標準出力」ではなく「標準エラー」にエラーメッセージを送信することです>&2
。また、スクリプト(またはプログラム)が失敗した場合は、exit 1
呼び出しコンテキストで何が間違っているのかを知るために、ゼロ以外の状態()で終了することをお勧めします。また、さまざまな状態を使用してさまざまな問題を示すこともできます(参照:マニュアルcurl
ページ良い例)。 (提案をしてくれたStéphane ChazelasとMonty Harderに感謝します。)
オペレーティングシステム、バージョン、設定などの間で移植性が高いため、(および)をprintf
使用しないことをお勧めします。 OSアップデートには、別のオプションでコンパイルされたbashバージョンが含まれており、動作が変更されたため、多くのスクリプトが破損する状況がありました。echo -e
echo -n
echo
$CODE
ここでは実際に二重引用符は必要ありません。内の文字列は、case
安全に保存できる数少ないコンテキストの1つです。ただし、特別な理由がない限り、変数参照を二重引用符で囲むことをお勧めします。どこが安全で、どこが安全でないかを追跡するのは難しいので、習慣的に二重引用符で引用する方が安全です。