試圖製作一個具有每個目錄和文件的UID/GID的文件。bash(用另一個文件中的值替換列中的值)
「out
」包括所有具有用戶名和組名的目錄/文件。
而且我想這個比較的/ etc/passwd文件$1
柱,並用UID更換/在/etc/passwd
所以GID上市讓我們說 「out
」 包括」
sam samgroup /home/sam/hi
aaron samgroup /home/aaron/no
我想它變成
1001 1002 /home/sam/hi
1002 1002 /home/aaron/no
(在與列對比並替換/從/etc/passwd
附加後)
我寫了這個,但是這在邏輯上是正確的?如果不是,如何解決它? 謝謝。
[增訂]
one="$(awk -F ":" '{print $2}' out)"
psw="$(awk -F ":" '{print $1}' /etc/passwd)"
pswthree="$(awk -F ":" '{print $3}' /etc/passwd)"
pswfour="$(awk -F ":" '{print $4}' /etc/passwd)"
while read -r out
do
if [ $one == $two ]
then sed "s/$one/$pswthree/g" <<< "$out"
fi
done < out
樣品/ etc/passwd中
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
幾個錯誤:你讀入變量但沒有使用該值 - 你應該在'while'中使用'$ out'。你並不是真的在運行'awk',你想要'$(awk ...)'這樣的東西。但是你首先需要在/ etc/passwd中搜索匹配的行,我沒有看到你這樣做。在if後,你需要'然後'和'fi',而不是'do'。 –
有一些語法錯誤。這應該是在讀取-r行時,你應該完成
2017-03-09 16:40:06
我會首先確保您可以迭代文件中的行並將其打印出來。 'while read -r line do echo $ line done
2017-03-09 16:42:01