for f in $*
do
mv common.txt corporate.txt
done
これは正しいですか? ?
答え1
単一ファイルの名前のみを変更する場合は、すべての場所パラメータを繰り返す必要はありませんが、すべての場所パラメータを繰り返す場合は、次のようにする必要があります。
for f in "$@"; do
$@
二重引用符を使用すると、単語の区切りの影響を受けずにスペースを含む引数を持つことができ、通常はさまざまな理由でより強力です。
スクリプトではmv common.txt corporate.txt
、ファイル名はパラメータによって変更されますが(common.txt
ファイルがスクリプトと同じディレクトリにあると仮定)、名前が変更されたことを確認するためのチェックは行われません。個人的には、ファイルのフルパスを指摘し、それを少し不要な追加の学習体験として使用できます。
そしていくつかの必要な追加は次のとおりです。
これらすべてを使用して、次のスクリプトを作成できます。
#!/bin/sh
file=/path/to/common.txt
path=$(dirname "$file")
if mv "$file" "${path}/corporate.txt"; then
printf '%s\n' "${file}: renamed successfully" >&2
else
printf '%s\n' "Failed to move: $file" >&2
fi
答え2
if mv common.txt corporate.txt; then echo "Success"