Van egy if a bash szkriptemben, amelynek ellenőriznie kell, hogy a 2 fájl létezik, ha nem léteznek, akkor ennek egyeznie kell. 
A kódom van:
if [[ ! -f /etc/benchmarking/code ]] && [[ ! -f /etc/benchmarking/code.class ]]; then echo "match" fi De ez nem történik meg úgy tűnik, valamiért nem működik.
 110% -ban biztos vagyok benne, hogy ez a 2 fájl nem létezik. Nem kapok hibát, csak nem adom meg a if fájlt. 
Új vagyok a bash szkriptek terén, így nem vagyok biztos benne, mi lehet helytelen.
Megjegyzések
Válasz
 Ha  -t akarja akár , akkor OR -t akarja, nem pedig AND. 
if [[ ! -f /etc/benchmarking/code ]] || [[ ! -f /etc/benchmarking/code.class ]]; then echo "match" fi - Ez megegyezik, ha egyik vagy mindkét fájl hiányzik.
-  A kódod csak akkor nyomtassa ki a match-t, ha mindkettő nem létezik.
De , Ön azt mondta:
110% -ig biztos vagyok benne, hogy ez a 2 fájl nem létezik. Nincs hibám, csak nem írja be az if-t.
Tehát állítása ellentmond önmagának. Ezen fájlok közül legalább egynek léteznie kell, iv kell = ha vagy futtatja ezt a kódot.
 Ha meg szeretné tudni, hogyan értékeli a if utasítás, futtassa a következővel: -x. 
#!/bin/bash -x if [[ ! -f /etc/benchmarking/code ]] && [[ ! -f /etc/benchmarking/code.class ]]; then echo "match" fi Ekkor látni fogja a végrehajtást.
$ ./test.sh + [[ ! -f /etc/benchmarking/code ]] + [[ ! -f /etc/benchmarking/code.class ]] + echo match match $ Megjegyzések
- Azt akarom, hogy visszhangozzon " egyezzen " egyik fájl sem létezik, ha létezik, akkor nem egyezik. Megpróbálom az -x használatával
- Ebben az esetben az eredeti kódjának rendben kell lennie. És valóban működik nekem.
Válasz
Nem ilyenek lennének? A fájl vagy B fájl, majd blabla.
if [[ -f /etc/benchmarking/code ]] || [[ -f /etc/benchmarking/code.class ]]; then echo "match" fi Válasz
Ez arra is alkalmas lehet, amit próbál. Egyetlen zárójelet ma nem használnak a bash-nál, de ez még mindig opció. Az “-o” használata gyakorlatilag egy “VAGY” művelet, és a “!” tagadja a feltételt.
var=/etc/benchmarking/code [ ! -f ${var} -o -f {var}.class ] && echo "match" Megjegyzések
-  Don ' t mindig használja a [elemet abashmezőben. Ettől eltekintve nem látom, hogy ez hogyan válaszolja meg a kérdést.
-  [ ! -f ${var} -a ! -f {var}.class ] && echo "match"annak kell lennie. A küldetés a következő volt: ha (mindkettő) nem létezik ', akkorecho match.
Válasz
 A kód megfelel az Ön követelményeinek: ki fogja nyomtatni match, feltéve, hogy egyik fájlt sem találja meg . 
 Ezért a match nem nyomtatásának oka máshol van. Meg kell erősítenie, hogy elérte a kódblokkot, amit megtehet, ha egy pár hibakereső üzenet. Például így: 
echo "@ About to enter if...fi block" if [[ ! -f /etc/benchmarking/code ]] && [[ ! -f /etc/benchmarking/code.class ]]; then echo "match" fi echo "@ Finished if...fi block" A szokásos beállításom, hogy az üzenetek hibakeresését a stderr annak érdekében, hogy elkerüljék az adatfolyam megszakítását a stdout ig, de ezt itt elkerültem, mert kezdőnek mondtad. Itt van egy példa arra, hogyan írhatsz a stdout :
echo "@ About to enter if...fi block" >&2 
[[ ! -f /etc/.../... ]]; echo $?mindegyikhez.[[ -f xxx ]]true értéket ad vissza, ha az xxx létezik , és egy normál fájl (vagy egy szimbolikus link egy rendes fájlhoz). Hamis értéket ad vissza, ha nem ' t létezik, vagy ha ' nem tudja megmondani, hogy létezik-e vagy sem, vagy létezik, de nem szabályos fájl (könyvtár, cső, eszköz, socket …) vagy ha ' szimbolikusan kapcsolódik egy olyan fájlhoz, amely nem létezik ', vagy ' t megmondani, hogy létezik-e vagy sem, vagy nem szabályos fájl …[[ -e $file ]] || [[ -L $file ]]közelebb áll a létezés tesztjéhez. Als -d -- "$file" > /dev/null 2>&1még közelebb van. És általában ez a fajta teszt versenykörülményekhez vezet. Talán ' más módja van.