我有一个脚本,它在我的开发服务器上运行良好,但是当我尝试在生产中运行它时却不起作用。
我收到以下我无法弄清楚的错误:
./test.sh: 第 5 行:UID:只读变量
有什么建议么?
#!/bin/sh
while read inputline
do
UID="$(echo $inputline | cut -d '"' -f4)"
PASSWORD="$(echo $inputline | cut -d '"' -f8)"
FIRST="$(echo $inputline | cut -d '"' -f6 | cut -d ' ' -f1)"
LAST="$(echo $inputline | cut -d '"' -f6 | cut -d ' ' -f2)"
zmprov createAccount $UID $PASSWORD displayName "$FIRST $LAST" givenName $FIRST sn $LAST
done < company.csv
答案1
在 shell 脚本中使用小写变量是个好主意,因为大写变量通常保留用于 shell 内部。(环境变量是个例外,但实际上应该以同样的方式对待,因为它们具有特殊含义,您不应该在不了解自己在做什么的情况下随意更改它们。)在这种情况下,bash
设置$UID
为它正在运行的 Unix uid,并且不允许更改它或将变量用于其他任何用途。除bash
(sh
可能是dash
或某些平台上的其他 shell)之外的 shell 可能不会以$UID
这种方式使用,并且如果bash
构建为在以 Bourne shell 兼容模式调用时工作sh
(这是默认模式,但许多 Linux 发行版禁用该模式),它也不会被视为$UID
特殊模式。
答案2
UID
是系统保留变量,其中包含有关脚本以何种用户身份运行的信息。您应该小心不要使用系统可能正在使用的标准变量名。您可以使用它env
来获取当前设置的列表。不要更改其中任何一个。在继续使用变量名之前,您还可以谷歌一下变量名,看看它们是否出现在其他用户中。
在这种情况下,使用小写字母可能会解决您的问题,因为只有大写字母变体被保留,但您也可以通过调用 $input_uid 之类的名称来使变量唯一,这样就可以清楚地知道该值来自脚本的输入。从长远来看,这将使您的代码更易于维护。