最近在學習如何編寫腳本程式碼。
我寫了一個腳本:
#!/bin/sh
# while3b.sh
while f=`line`
do
.. process f ..
done < ./myfile
這是myfile
hello
howdy
gday
bonjour
guten tag
您好!
*
在終端機中,我輸入:sh while3b.sh
然後它會提示一些像這樣的權限資訊。
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
我嘗試使用來ls -al
檢查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
我曾經su - root
更改為超級用戶,然後再次執行 while3b.sh 腳本,顯示相同的資訊。為什麼?
有人可以幫我一個忙嗎?先感謝您。
答案1
*
我的猜測是,它是您的 .txt 檔案中包含星號(“”)的行myfile
。f
當星號擴展為模式匹配字元時,您以某種方式進行評估,並且可能會遇到麻煩。
例子:
#!/bin/sh
# while3b.sh
while f=`line`
do
echo $f
done < ./myfile
導致
$ ./while3b.sh
hello
howdy
gday
bonjour
guten tag
您好!
myfile myfile~ while3b.sh
因為我的目錄包含三個文件myfile
,myfile~
和while3b.sh
。您應該檢查您的程式碼,您將其縮寫為“處理”,當$f
收到*
.