2017-07-18 8 views
-1

このbashを実行しようとすると、予期しない構文エラーが発生し、最後の行であり、すでにそこにあります。私はまだかなり新鮮なbashですが、私は基本的なことをするのに十分知っています。誰かが私が間違っていることを知っていますか?構文エラー:ファイルの終わりが予想外( "fi"が予想される)ですが、fiがすでに存在しています

#!/bin/sh 
echo "============================================================================================" 
echo "||What is the Songs Genre (Classical, Country, Disco, Dubstep, Pop, Rap, Rock, or Techno)?||" 
echo "============================================================================================" 

read "Genre" 

if ($genre=="Classical") 
then 
cd ~/Music/Classical 

if ($genre=="Country") 
then 
cd ~/Music/Country 

if ($genre=="Disco") 
then 
cd ~/Music/Disco 

if ($genre=="Dubstep") 
then 
cd ~/Music/Dubstep 

if ($genre=="Pop") 
then 
cd ~/Music/Pop 

if ($genre=="Rap") 
then 
cd ~/Music/Rap 

if ($genre=="Rock") 
then 
cd ~/Music/Rock 

if ($genre=="Techno") 
then 
cd ~/Music/Techno 

fi 

echo "============================" 
echo "||Paste Youtube link here.||" 
echo "============================" 

read "Link" 
sudo youtube-dl -x --audio-format mp3 $Link 

echo "========================" 
echo "||Any More songs?(Y/N)||" 
echo "========================" 

read "Loop" 

if $Loop==Y 
then 
cd 
sh youtube.sh & exit 

else 
exit 
fi 
+1

あなたは他人のためにそれを置くことなく離れて得ることができると思いましたか? –

+1

私は 'elif'をすべてのものに使いたいと思っていますが、最初はそれが閉じていなければ – Chris

+1

http://shellcheck.net/はあなたの友人です。コードを実行し、見つかったものを修正してから**ここに戻ってください。 ( '($ genre ==" Pop ")'は有効な比較ではありません)。 –

答えて

1

あなたのいずれかがelifへの最初の1の後にあなたのif文を各if...thenブロックの後fiを置く、または変更する必要があります。

+0

OPのコードが実際に動作するには、必要十分ですが、十分ではありません。 'if($ genre ==" Techno ")'はOPが期待していることを決して実行しません。 (これは[回答方法​​](https://stackoverflow.com/help/how-to-answer)の「よく質問される質問に答える」ことを指定している理由の一部です。質問が1つの問題に限定されている場合問題がたくさんあるスクリプトを投稿するよりも、これは問題ではありません)。 –

+0

質問は構文エラーについて特に質問します。私は構文の質問に答えました。コードに他のエラーがある場合はそれもありますが、質問は非常に直接的なものであり、よく質問されています。問題がこのコードで間違っていた場合は、私はあなたに同意しますが、そうではありません。 – yanman1234

+0

他の人が構文エラーだけで再現できるようにするのに必要な最短コードを持つ[mcve]ではなく、スクリプト全体(他のバグの束を含む)が含まれているかどうかはよく分かりません。 –

1

これははるかに簡潔にすることができます。私はこれを書くだろう:

#!/bin/bash 
echo "==============================================" 

# put the genre names into an array 
genres=(Classical Country Disco Dubstep Pop Rap Rock Techno) 

# use `select` instead of a cascading if statement 
PS3="Select a genre: " 
select choice in "${genres[@]}"; do 
    # a tricky condition to check if the choice is in the array 
    if [[ " ${genres[*]} " == *" $choice "* ]]; then 
     break 
    fi 
done 

read -p "Enter Youtube link: " link 

mkdir -p ~/Music/"$choice"  # ensure the directory exists 
cd ~/Music/"$choice" 
youtube-dl -x --audio-format mp3 "$link" # do you really need sudo for this? 

read -p "Again?(Y/N) " again 
if [[ $again == [yY]* ]]; then 
    exec "$0"     # re-launch without hardcoding the program name 
fi 
関連する問題