Vor kurzem lerne ich, wie man Skriptcode schreibt.
Ich habe ein Skript geschrieben:
#!/bin/sh
# while3b.sh
while f=`line`
do
.. process f ..
done < ./myfile
und hier istmyfile
hello
howdy
gday
bonjour
guten tag
您好!
*
Im Terminal habe ich Folgendes eingegeben: sh while3b.sh
und dann wurden einige Berechtigungsinformationen wie diese abgefragt.
while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied
Ich habe versucht, ls -al
zu überprüfen rwx
,myfile
-rwxrwxrwx 1 shanechiu shanechiu 48 Jan 31 11:38 myfile
-rwxr-xr-x 1 shanechiu shanechiu 61 Jan 31 11:45 while3b.sh
und ich su - root
wechselte zum Superuser und führte dann das while3b.sh-Skript erneut aus. Es wurden dieselben Informationen angezeigt. Warum?
Kann mir jemand einen Gefallen tun? Vielen Dank im Voraus.
Antwort1
Ich vermute, dass es sich um die Zeile handelt, die das Sternchen (" *
") in Ihrem enthält myfile
. Sie werten es f
irgendwie aus und stoßen wahrscheinlich auf Probleme, wenn das Sternchen als Mustervergleichszeichen erweitert wird.
Beispiel:
#!/bin/sh
# while3b.sh
while f=`line`
do
echo $f
done < ./myfile
führt zu
$ ./while3b.sh
hello
howdy
gday
bonjour
guten tag
您好!
myfile myfile~ while3b.sh
Denn mein Verzeichnis enthält die drei Dateien myfile
, myfile~
und while3b.sh
. Sie sollten Ihren Code, den Sie mit „Prozess“ abgekürzt haben, untersuchen, was er tut, wenn er $f
mit den Dateien gefüttert wird *
.