2017-07-11 2 views
0

Kann mir jemand mit dem unten helfen. Ich verstehe nicht, was falsch ist, keine Ausgabe. Meine Anforderung ist, eine Datei zu lesen und zu prüfen, ob sie nicht leer ist und den Inhalt zeilenweise auszugeben.While-Schleife funktioniert nicht in der Shell

#!/bin/ksh 
    echo " enter file name " 
    read $file 
    if [ -f "$file" ] && [ -s "$file" ] 
    then 
    echo " file does not exist, or is empty " 
     else 
    while IFS='' read -r line || [[ -n "$file" ]];do 
     echo "$line" 
    done 
    fi 

Antwort

1

read $file sollte read file

Ihre Vergleichslogik sein rückwärts ist. Der Vergleich if [ -f "$file" ] && [ -s "$file" ] ist 'Wenn die Datei eine reguläre Datei ist und nicht leer, gehen Sie in den Fehlerfall'. Sie wollen 'wenn die Datei nicht regulär ist oder die Datei leer ist, gehen Sie in den Fehlerfall' if [ -f "$file" ] -eq 0 || [ -s "$file" ] -eq 0.

Per ksh file read sollte

while IFS='' read -r line 
    do 
     echo "$line" 
    done < "$file" 

Further Reading On ksh redirection

+0

Dank John sein .. Es funktionierte. – Sunny1985

Verwandte Themen