2017-07-18 49 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

你要麼需要把fiif...then塊之後,或者改變您的if語句中的第一個elif後。

+0

必要的,但不足以讓OP的代碼正常工作。例如,如果($ genre ==「Techno」)'永遠不會做OP所期望的。 (這是爲什麼[如何回答](https://stackoverflow.com/help/how-to-answer)指定應該「回答完善的問題」)的一部分;如果問題的範圍僅限於單個問題而不是發佈一大堆問題的腳本,這不是一個問題)。 –

+0

該問題具體詢問語法錯誤。我回答了這個語法問題。如果代碼中存在其他錯誤,那麼問題就直接反映在問題中,使其成爲一個全面問題。如果問題是這段代碼有什麼問題,那麼我會同意你的看法,但事實並非如此。 – yanman1234

+0

如果它包含一個完整的腳本(帶有一堆其他的bug)而不是[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 
相關問題