私はUnixクラスの紹介をしていて、最終的な割り当てに固執しています。スクリプトの実行時に入力されるファイル名のファイル拡張子を変更するスクリプトを作成する必要があります。スクリプトの実行時に、新しいファイル拡張子も入力されます。スクリプトはchExt1.shを呼び出します。スクリプトの最初の試行は次のように実行されます
./chExt1.sh cpp aardvark.CPP
スクリプトは、2番目の入力ファイル拡張子を最初の入力で指定されたファイル拡張子に変更することを想定しています。どのファイル拡張子がファイル名で指定されているか、またはどのファイル拡張子が新しい拡張子として指定されているかは問題ではなく、大文字から小文字に変更するためだけのものでもありません。次の場合、これを非常に明確にすることを望んでいます。
./chExt1.sh istink helpme.plEaSe
スクリプトはhelpme.plEaSeをhelpme.istinkに変更します。私はこのフォーラムとグーグルで検索しましたが、見つけたさまざまな例を試してみました。以下は私が試した例のいくつかと私が現在持っているものです。現在
#!/bin/sh
fileExtension="$1"
shift
oldName="$2"
shift
newName=${oldName%%.*}${fileExtension}
echo $newName
エコーは、それが機能するかどうかを確認するためのものです。機能するようになったら、mvを追加して保存します。私が試した他の人:
newName=`${oldName%.*}`
newName=`${oldName#.*}`
sed 's/\.*//' $oldName > $newName
私が使用した他のsedのいくつかを見つけることができないようですが、それらには多くのバックスラッシュと()が含まれています。入力するファイル拡張子がわからないため、basenameコマンドを試しませんでした。私が見たすべての例では、削除したいものを指定する必要がありましたが、できません。使用したさまざまな見積もりのバリエーションをすべてリストしたわけではありませんが、たくさん試しました。私の指示では、クラスからsedコマンドを使用する方法を知っている必要があるため、sedコマンドを使用するように指示されていますが、それを実行しようとすると、ファイルの終わりだけを分離するのではなく、(終了するのに非常に時間がかかるため)それを信じていますファイル全体を調べて、パターンとして。*を実行し続けた原因の後に。と何かを探しています。あなたが与えることができるどんな助けにも感謝します。