Bashスクリプト、名前を確認し、「script_name」.shと一致しない場合は、.shを名前に関連付けて保存します。

Bashスクリプト、名前を確認し、「script_name」.shと一致しない場合は、.shを名前に関連付けて保存します。

私は次のことを思い出しました。

#!/bin/bash
FILE_NAME="$0"
EXTENSION=".sh"
FILE_NAME_MOD="$FILE_NAME$EXTENSION"

if [[ "$0" != "FILE_NAME_MOD" ]]; then
  cp "$0" | sed 's/\([^.sh]\)$/\1.sh/g' $0
fi

明らかに問題があるようですが、解決策を見つけるのに役立ちます。

答え1

次の文章を試してくださいcase

FILE_NAME=$0
EXTENSION='.sh'
FILE_NAME_MOD="$FILE_NAME$EXTENSION"

case "$FILE_NAME" in
    *"$EXTENSION") ;;
    * ) mv -i "$FILE_NAME" "$FILE_NAME_MOD" &&
        printf '%s\n' "file has been renamed to '$FILE_NAME_MOD'" ;;
esac                      
  • FILE_NAMEまだ終わっていEXTENSIONない場合FILE_NAME_MOD

関連情報