手紙

手紙

このシェルスクリプトをどのように短縮できますか?

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また、変数名をすべて大文字(たとえば)から小文字または大文字と小文字の混合(たとえば、またはcodeCodeに変更することをお勧めします。特別な意味を持つ大文字の名前がたくさんあり、そのうちの1つを誤って再利用すると問題が発生する可能性があります。

追加の注意:標準ルールは、「標準出力」ではなく「標準エラー」にエラーメッセージを送信することです>&2。また、スクリプト(またはプログラム)が失敗した場合は、exit 1呼び出しコンテキストで何が間違っているのかを知るために、ゼロ以外の状態()で終了することをお勧めします。また、さまざまな状態を使用してさまざまな問題を示すこともできます(参照:マニュアルcurlページ良い例)。 (提案をしてくれたStéphane ChazelasとMonty Harderに感謝します。)

オペレーティングシステム、バージョン、設定などの間で移植性が高いため、(および)をprintf使用しないことをお勧めします。 OSアップデートには、別のオプションでコンパイルされたbashバージョンが含まれており、動作が変更されたため、多くのスクリプトが破損する状況がありました。echo -eecho -necho

$CODEここでは実際に二重引用符は必要ありません。内の文字列は、case安全に保存できる数少ないコンテキストの1つです。ただし、特別な理由がない限り、変数参照を二重引用符で囲むことをお勧めします。どこが安全で、どこが安全でないかを追跡するのは難しいので、習慣的に二重引用符で引用する方が安全です。

おすすめ記事