我的bash腳本遍歷一堆文件,如果發現一個包含一些文本意想不到的文件,它設置了一個錯誤標誌,並應該退出循環。問題是,當我評估循環後的錯誤情況時,錯誤標誌設置不正確。 我似乎無法看到錯誤在哪裏。
代碼
#!/bin/sh
valid=1
grep -rs -L 'bogustext' * | while read line; do
echo "Processing file '$line'"
if [ "$line" != "arc/.keep" ] && [ "$line" != "arc/prp/lxc" ] && [ "$line" != "arc/lbb/lxc" ]; then
valid=0
echo "just set it to zero - $valid"
break 2
fi
done
echo "$valid"
if [ "$valid" -eq 0 ]; then
echo "1..1"
echo "not ok $line invis malformed"
else
echo "1..1"
echo "ok"
fi
下面是這說明這個問題/錯誤的輸出。正如你所看到的,列表中有一個額外的文件,其中包含僞造字符串「arc/ttp」。該腳本將「有效」變量設置爲0,但在我準備評估它以顯示正確的狀態時,它仍然是原始值。
lab-1:/var/vrior# sh test.sh
Processing file 'arc/.keep'
Processing file 'arc/prp/lxc'
Processing file 'arc/lbb/lxc'
Processing file 'arc/ttp'
just set it to zero - 0
1
1..1
ok
什麼我試過到目前爲止 我目前谷歌搜索,看看是否在Bash中有局部變量與全局。不太確定,但如果你看到我的錯誤,請告訴我。
此外,[BashFAQ/024](http://mywiki.wooledge.org/BashFAQ/024 ):「我在一個管道中的循環中設置變量,爲什麼在循環終止後它們消失了?或者,爲什麼我不能通過管道數據讀取?」 –
謝謝@BenjaminW。問題是我是一個shell編程的noob,所以我甚至不知道要搜索什麼。甚至不知道「|」被稱爲管道。但現在我知道了!感謝您的鏈接 – dot