【问题标题】:Linux shell scripting error with while loop syntax带有while循环语法的Linux shell脚本错误
【发布时间】:2013-12-21 17:00:48
【问题描述】:
#!/bin/bash
initial="/"
usrname=`cut -d ":" -f1 users.txt`
password=`cut -d '"' -f3 users.txt|cut -d ":" -f2`
comment=`cut -d '"' -f2,3 users.txt|cut -d ":" -f1`
path=`cut -d "/" -f2,3 users.txt`
totalpath="$initial$path"
while read line
  do
  useradd -p "$password" -c "$comment" -m -d "$totalpath" "$usrname"
done < "users.txt"

我正在尝试使用文本文件添加多个用户。我收到“意外标记‘完成’附近的语法错误”。 我所有存储的变量都非常完美。我使用 echo 命令对其进行了测试。但是,当我运行循环时,会弹出错误消息并且没有创建用户。

供您参考,这是我的文本文件的样子:

acdeng:"ADLER CHARLES DAVID",00-9388,x0753,Engineering:acc944:/home/Engineering
ardsal:"ANSELL ROBERT D",14-2675,x1624,Sales:acc944:/home/Sales

【问题讨论】:

  • 除了任何语法错误外,$password$comment 等的值不会每次通过while 循环更新;只有$line 被更新,你不使用它的值。
  • 您是否复制并粘贴了您的准确代码?我不相信您发布的代码中存在语法错误(尽管存在一些严重的逻辑错误)。
  • 我是脚本新手。是的,我复制了确切的代码。

标签: linux bash shell while-loop


【解决方案1】:

如上所述,该脚本似乎为我运行,没有任何语法错误。

但是,我会注意到您似乎并未解析文件的每一行。对usrname 等人的初始分配是提取多行切片,然后在循环的每次迭代中按原样使用。您永远不会在循环中引用 $line,因此在每次迭代中,您都会收到对 useradd 的相同调用。

我建议在useradd 前面添加echo,这样您就可以看到您实际发出的命令。

【讨论】:

  • 嗨,丹,回声没有效果。仍然是相同的错误消息。它没有创建任何用户。
  • 供您参考,这是我的 users.txt 文件的样子 acdeng:"ADLER CHARLES DAVID",00-9388,x0753,Engineering:acc944:/home/Engineering ardsal:"ANSELL ROBERT D" ,14-2675,x1624,Sales:acc944:/home/Sales bcmar:"BIANCHI CHRISTOPHER",12-2275,x3280,Marketing:acc944:/home/Marketing cmbman:"CAPOZZI MICHAEL B",08-3191,x8035,制造:acc944:/home/Manufacturing
  • Danfuzz 的中段非常重要。您的“剪切”调用在您的循环之外。您为每个“剪切”读取一次文件,然后在循环中读取一次。
猜你喜欢
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
相关资源
最近更新 更多