Unix组织脚本

时间:2012-07-31 21:37:36

标签: bash

所以我现在正处于夏季的Intro 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    '

2 个答案:

答案 0 :(得分: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!"

答案 1 :(得分:2)

您的for循环格式不正确。

for ...
do
   ...
done

修改

if需要fi