Bash脚本错误:./test:第5行:UID:只读variables

我有一个脚本,可以在我的开发服务器上正常工作,但是当我尝试在生产中运行它时无法正常工作。

我收到以下错误,我无法弄清楚:

./test.sh:第5行:UID:只读variables

有什么build议么?

#!/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 

在shell脚本中使用小写variables是一个好主意,因为大写variables通常保留给shell内部。 (环境variables是一个例外,但是应该以同样的方式处理,因为具有特殊含义的东西不应该在不知道自己在做什么的情况下随意更改)。在这种情况下, bash$UID设置为Unix UID它正在运行,不会允许它被改变或variables被用于其他任何事情。 除bash以外的其他shell( sh可能是某些平台上的dash或某些其他shell)可能不会$UID这种方式使用$UID ,并且如果bash被构build为在Bourne shell兼容性模式下工作时被调用为sh (这是默认的,但许多Linux发行版禁用),它不会将$UID视为特殊的。

UID是一个系统保留variables,其中包含有关脚本运行的用户标识的信息。 您应该小心,不要使用系统可能使用的标准variables名称。 您可以使用env来获取当前设置的列表。 不要改变任何这些。 你也可以谷歌variables名称,看看他们是否在其他用户之前,他们继续前进。

在这种情况下,使用小写可能会解决您的问题,因为只有大写变体是保留的,但您也可以通过调用像$ input_uid这样的variables来使variables唯一,所以显然值是从input到脚本的。 这将使您的代码从长远来看更容易维护。