Vraag controleer bestaand script [werkt niet] [gesloten]


Ik wil het bestaan ​​van een paddirectory controleren en een voorbeelddirectory opnemen waarin ik rechten heb om bestanden te bekijken en dit bericht verschijnt:

No such file or directory /long_path/path1/abc.txt
No such file or directory /long_path/path2/xyz.txt

Hier is een code:

#!/bin/sh
set -x
while read line; do
(ls -l $line)
done </something/pathlist.txt

Inside pathlist.txt:

/long_path/path1/abc.txt
/long_path/path2/xyz.txt

Ik heb verschillende iteraties geprobeerd ... voorbeeld2.sh code:

#!/bin/ksh
echo "Start!"
#entry="/something/pathlist.txt"
while read entry; do
    if [ -s $entry ];
    then
        echo "$entry exists"
    else
        echo "$entry does not exist..."
fi
done </something/pathlist.txt

voorbeeld3.sh code:

#!/bin/csh
while read entry; do
    if [ -e $entry ];
    then
        echo "$entry does not exist"
    else
        echo "$entry exists "
 fi
 done </something/pathlist.txt

Help me alstublieft!


0
2017-10-23 17:00


oorsprong


Dit is een vraag voor stackoverflow.com - Yurii Kolesnykov
Gebruik if [ -e "$entry" ]; - A.B.
Ik gebruik een UNIX-box en de code werkt niet. Op Solaris werkt de code prima. smh ... [Shake My Head] #stupidpost - MaestroCookies
@YuriiKolesnykov Bash-vragen staan ​​hier ook op het spel;) MasestroCookies, UNIX is dat echter niet. Als je daarover wilt vragen Unix en Linux. Bedankt! - Seth♦


antwoorden:


Er zijn twee dingen aan de hand. if list; then list; [elif list; then list;] ... [else list;] fi statement werkt op exit-statussen. Als de exitstatus van lijst # 1 0 is, wordt lijst 2 uitgevoerd; anders gaat het naar de lijst 3.

Het testcommando (dat is ge Aliased met vierkante haken) geeft 0 terug als de code succesvol is [ -e /etc/passwd ] .

Dus in die zin is het hetzelfde als in C en Java, maar omgekeerd.

Gecorrigeerd script

#!/bin/mksh
#set -x
echo "Start!"

while IFS=  read entry; do

  if [ -e "$entry" ] ; then

  echo "$entry exist"

   else

   echo "$entry doesnt exist"

   fi

done < $HOME/pathlist.txt

Codeer ook niet voordat u koffie drinkt


1
2017-10-23 17:38



Het resultaat is nog steeds hetzelfde. Ik heb abc.txt verwijderd. Uitvoer toont "abc.txt bestaat". - MaestroCookies
Huh? Dat is raar . . . Ik ben er 100% zeker van dat de syntaxis correct is. OK, ik zal het proberen te repareren - Sergiy Kolodyazhnyy
Ik zal proberen op de Solaris-machine te werken - ik gebruik CSH - MaestroCookies
csh syntaxis is dat anders ksh syntaxis. Ook als u opgeeft om te gebruiken ksh in de #!/bin/ksh het is voorbij ksh , csh heeft er niets mee te maken - Sergiy Kolodyazhnyy


  1. U moet leren hoe omleiding in Unix werk is. Omdat u omleiding moet gebruiken wanneer u het script aanroept, maar niet in code.
  2. Ik weet het niet zeker, maar ik denk dat je vervanging nodig hebt #!/bin/ksh met #!/bin/sh.
  3. WINST!
#!/bin/sh
while read entry; do
    if [ -s $entry ];
    then
        echo "$entry exists"
    else
        echo "$entry does not exist..."
fi
done

Bewaar het en dan.

chmod +x example2.sh
example2.sh < something/pathlist.txt

0
2017-10-23 17:39



Ik heb echo $ shell / bin / csh script nog steeds niet gebruikt ._. - MaestroCookies
Werkt prima bij bash. - Yurii Kolesnykov