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