gpt4 book ai didi

bash - Shell 逐行读取文件,但在每一行之后都显示未找到。我错过了什么?

转载 作者:行者123 更新时间:2023-12-04 19:00:13 31 4
gpt4 key购买 nike

我正在尝试创建一个 shell 脚本来创建用户并创建/添加每个
来自 ubuntu 18.04 中 txt 文件列表中的组。我在读取输入文件时遇到问题。

抱歉,我是脚本初学者,但我有其他语言的经验。

我尝试在 while 和 for 循环之间切换(没关系)并且我已经修复了路径以便它可以读取文件,但是在每一行之后它都会显示“bob:未找到”。现在,当我尝试修复它时,我只是让它回响。

到目前为止,这是我的 shell 脚本:
GNU nano 2.5.3 文件:shell_lab

#!/bin/sh
# test
cd "$(dirname "$0")"

echo "script running"

for line in $(./input.txt)
do
echo "$line"
done

这是我的输入文件(在同一目录中):

GNU nano 2.5.3 文件:input.txt
bob
larry
joe

我希望得到回应:
鲍勃
拉里


这就是我得到的:
konather@ubuntu:~$ sudo ./shell_lab
script running
./input.txt: 1: ./input.txt: bob: not found
./input.txt: 2: ./input.txt: larry: not found
./input.txt: 3: ./input.txt: joe: not found`

我也试过这个我发现的结果相同:
#!/bin/sh

for i in `./input.txt`
do
echo $i
# echo $i"123" | passwd "$i" --stdin
# echo; echo "User $username's password changed!"
done

上面已经解决了,下面还有一个问题

我还有一个稍微无关的问题。我现在正在尝试自动创建密码。我已经从管道中的 input.txt 文件中回显密码,但我认为它实际上并没有响应我的提示。
while read u1 p1
do
echo "$p1" |echo "$p1"| passwd $u1
# echo "$u1 had the password changed to $p1"
done < input.txt
结果: script running Enter new UNIX password: Retype new UNIX password: passwd: Authentication token manipulation error passwd: password unchanged

最佳答案

$(./input.txt)是尝试调用命令 ./input.txt 的命令替换.根据您的描述 input.txt不是生成列表的可执行文件,而是包含以下内容的文本文件:

$ cat input.txt
bob
larry
joe

如果要遍历文件中的行,则需要将文件重定向为输入。您可以通过在命令替换中包含重定向运算符来做到这一点,例如 $(< ./input.txt) ,但正如评论中所述,您最好将文件重定向到 while循环,例如
#!/bin/sh
# test
cd "$(dirname "$0")"

echo "script running"

while read line
do
echo "$line"
done < input.txt

示例使用/输出
$ sh test.sh
script running
bob
larry
joe

您应该通过检查 '\n'line 初始化,例如
while read line || [ -n "$line" ]
do
echo "$line"
done < input.txt

这将允许您读取和输出最后一行,无论输入文件中的最后一行文本之后是否有适当的行结束。

如果您还有其他问题,请仔细查看并告诉我。

关于bash - Shell 逐行读取文件,但在每一行之后都显示未找到。我错过了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58386014/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com