Pahoittelut, jos asiani on jo kysytty muissa viesteissä, mutta en löytänyt yhtään. Kirjoitan pieni shell-komentosarja, joka vaatii minua kirjoittamaan sisäkkäisen if-lauseen. En ole varma, että teen sen oikein. Minulla ei ole virheitä, mutta ohjelma ei toimi odotetulla tavalla. Haluan: Jos tiedosto on jo kohdassa MasterFile.txt, käyttäjällä on mahdollisuus joko ottaa toinen tietojoukko sanomalla y tai Y, tai sano n tai N ohjelman lopettamiseksi.  Ongelma: Skripti ei lopu . Jos tiedostoa ei ole kohdassa MasterFile.txt, ota tietojoukko. Tässä on koodi: 
if grep -q "dicounter_${string1}_from_${string2}" MasterFile.txt; then { echo "dicounter_${string1}_from_${string2} already exists in the MasterFile. Would you like to proceed?" read string3 if "${string3}" = "Y" || "${string3}" = "y"; then { screen -S trans -L /dev/ttyACM0 screen -S trans -X stuff "s"$(echo -ne "\015") sleep 8s screen -S trans -X quit } else{return} fi else{ #opening screen & begin analysis screen -S trans -L /dev/ttyACM0 screen -S trans -X stuff "s"$(echo -ne "\015") sleep 8s screen -S trans -X quit } fi 
Kommentit
Vastaa
Nopea palautus kirjoita tavallisemmalla syntaksilla:
if grep -q "dicounter_${string1}_from_${string2}" MasterFile.txt; then echo "dicounter_${string1}_from_${string2} already exists in the MasterFile. Would you like to proceed?" read string3 if [[ "${string3^}" == "Y" ]]; then screen -S trans -L /dev/ttyACM0 screen -S trans -X stuff "s"$(echo -ne "\015") sleep 8s screen -S trans -X quit else exit 0 fi else #opening screen & begin analysis screen -S trans -L /dev/ttyACM0 screen -S trans -X stuff "s"$(echo -ne "\015") sleep 8s screen -S trans -X quit fi 
 Sinulla ei näytä olevan mitään tässä ilmoitettuja toimintoja, joten return ei kelpaa tähän käyttötapaukseen. Oletan, että ei-myöntävä vastaus kysyttyyn kysymykseen on tarkoitettu keskeyttämään koko komentosarja, minkä vuoksi exit käytetään. 
 Rakenne ${variable^} pakottaa $variable, jos kirjain, ensimmäisen merkin isoksi, mikä yksinkertaistaa vastaustarkistusta. 
Kommentit
-  Joten kaksi asiaa: yksi, jos kirjoitan 
y, se lopetetaan, ja riippumatta siitä, mitä kirjoitan, saan seuraava virhe./test/sh: line19: [[variable: command not found -  varmista, että komentosarjan ensimmäinen rivi on 
#!/bin/basheikä#!/bin/sh.[[ [...] ]]-konstruktit ovatbashism. - kyllä, otsikko on oikea
 -  Ja sinulla on välilyönti 
[[ja"${string3^}"? -  Siinä kaikki! Kiitos vielä kerran. Jos sinulla on aikaa, opetatko minulle, mitä 
[[tarkoittaa ja miksi välilyönti voi olla niin tärkeä? 
sh-tyyppiset kuoret eivät ' käytä{ ... }lohkoihin.{...}on ongelma. Sisäkkäisenifif "${string3}" = 'Y'ottaa komentojenstring3sisällön komennon nimeksi ja suorittaa sen kahdella argumentilla=jaY…