Elnézését kérem, ha a problémámat már feltették más bejegyzésekben, de nem találtam ilyet. Írok egy kis shell parancsfájl, amely megköveteli, hogy beágyazott if utasítást írjak. Nem igazán vagyok biztos benne, hogy jól csinálom-e. Nincsenek hibáim, de a program nem úgy működik, ahogy elvárom. Amit szeretnék: Ha a fájl már MasterFile.txt
fájlban van, akkor a felhasználónak lehetősége van egy másik adatkészlet felvételére is, mondván: y
vagy Y
, vagy mondja ki a n
vagy N
parancsot a program leállításához. Probléma: A szkript nem fejeződik be . Ha a fájl nem létezik a MasterFile.txt
helyen, akkor vegye be az adatkészletet. Itt van a kód:
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
Megjegyzések
Válasz
Gyors válasz írjon hagyományosabb szintaxissal:
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
Úgy tűnik, hogy itt nincsenek deklarált funkciói, ezért return
nem érvényes erre a felhasználási esetre. Feltételeztem, hogy a megkérdezett kérdésre adott nem megerősítő válasz a teljes szkript megszakítását jelenti, ezért az exit
használatát.
A ${variable^}
a $variable
első karakterét, ha egy betű, nagybetűvé teszi, ami egyszerűsíti a válaszellenőrzést.
Megjegyzések
- Tehát két dolog: egy, ha beírok
y
, akkor kilép, és függetlenül attól, hogy mit írok be, megkapom a következő hiba./test/sh: line19: [[variable: command not found
- győződjön meg arról, hogy a szkript első sora
#!/bin/bash
, és nem#!/bin/sh
. A[[ [...] ]]
konstrukciókbash
ism. - igen, a fejléc helyes
- És van szóköz
[[
és"${string3^}"
között? - Ennyi volt !! Még egyszer köszönöm. Ha van ideje, megtanítaná, hogy mit jelent a
[[
, és miért lehet olyan fontos egy szóköz?
sh
-típusú héjak ne ' ne használja a{ ... }
elemeket a blokkokhoz.{...}
probléma. Valami nem stimmel a beágyazottif
else
utasításif "${string3}" = 'Y'
astring3
tartalmát veszi egy parancs neveként, és két argumentummal futtatja=
ésY
…