1

私は今夏の Unix 入門コースに参加しており、ファイル拡張子に基づいてファイルをディレクトリに編成するスクリプトを作成する必要があります。現在、見つけられないように見える構文エラーが発生しています。これが私のスクリプトです:

#!/bin/bash

echo -e "Are you sure you want to reorganize your files? (Y to continue)"
read response

if [ $response == "Y" ]  ; then 

    echo "Organizing files!"
    touch organize.log
    echo "Organizing..." > organize.log

    mkdir music
    mkdir video
    mkdir text

    for filename in *
    do
        extension="${filename##*.}"

    if [ extension == "mp3" ] || [ extension == "oog" ] || [ extension == "wav" ] ; then

            echo "$filename --> music/$filename" > organize.log
            mv $file music 

    elif [ extension == "wmv" ] || [ extension == "mov" ] || [ extension == "mpg" ] ; then

        echo "$filename --> video/$filename" > organize.log
        mv $file video 

    elif [ extension == "txt" ] ; then

        echo "$filename --> text/$filename" > organize.log
        mv $file text

    done

    echo "Finished organizing files!"
    echo "Bye!"

else
    echo "Ok then. Bye."
    exit

fi

exit

私はUnixを初めて使用するので、これはかなり難しいと思います。誰かが私にヒントを与えることができれば、私は非常に感謝しています.

新しいエラーは次のとおりです。

organizefiles.sh: line 38: syntax error near unexpected token `done'
organizefiles.sh: line 38: `    done    '
4

2 に答える 2

3

これは、スクリプトのより簡潔なバージョンです

#!/bin/bash

read -p "Are you sure you want to reorganize your files? (Y to continue) " response
if [[ $response != [Yy]* ]]  ; then 
    echo "Ok then. Bye."
    exit
fi

echo "Organizing files!"
# don't need "touch", the file will be created if it doesn't exist.
echo "Organizing..." > organize.log

# use "-p" to avoid errors if the dirs already exist
mkdir -p music video text

# Don't Repeat Yourself, use a function
function moveto {
    echo "$2 --> $1/$2" >> organize.log
    mv "$2" "$1"
}

for filename in *
do
    case "${filename##*.}" in 
        mp3|ogg|wav) moveto music "$filename" ;;
        wmv|mov|mpg) moveto video "$filename" ;;
        txt)         moveto text  "$filename" ;;
    esac
done

echo "Finished organizing files!"
echo "Bye!"
于 2012-08-01T00:22:03.280 に答える
2

forループの形式が正しくありません。

for ...
do
   ...
done

編集:

ifニーズfi

于 2012-07-31T21:40:08.713 に答える