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

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

我有一个脚本,它在我的开发服务器上运行良好,但是当我尝试在生产中运行它时却不起作用。

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

./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,并且不允许更改它或将变量用于其他任何用途。除bashsh可能是dash或某些平台上的其他 shell)之外的 shell 可能不会以$UID这种方式使用,并且如果bash构建为在以 Bourne shell 兼容模式调用时工作sh(这是默认模式,但许多 Linux 发行版禁用该模式),它也不会被视为$UID特殊模式。

答案2

UID是系统保留变量,其中包含有关脚本以何种用户身份运行的信息。您应该小心不要使用系统可能正在使用的标准变量名。您可以使用它env来获取当前设置的列表。不要更改其中任何一个。在继续使用变量名之前,您还可以谷歌一下变量名,看看它们是否出现在其他用户中。

在这种情况下,使用小写字母可能会解决您的问题,因为只有大写字母变体被保留,但您也可以通过调用 $input_uid 之类的名称来使变量唯一,这样就可以清楚地知道该值来自脚本的输入。从长远来看,这将使您的代码更易于维护。

相关内容