变量内的位置参数不可读 - bash 脚本

Positional parameter not readable inside the variable - bash script

我正在处理的小脚本有问题,你能解释一下为什么它不起作用吗:

#!/bin/bash
var1=$( linux command to list ldap users | grep "user: ")
echo $var1

因此,当我部署我的脚本 (./mycript.sh $michael) 时,它应该使用该值而不是 $1 并通过 echo $variable1 提供输出?就我而言,这是行不通的。

你能解释一下我应该如何配置变量内的位置参数吗?

我尝试了这个解决方案,但没有帮助:

#!/bin/bash
var1=$( linux command to list ldap users | grep user: )
echo $var1

如果您将脚本调用为 ./mycript.sh $michael 并且变量 michael 未在 shell 中设置,那么您将在不带参数的情况下调用脚本。也许您的意思是 ./myscript.h michael 将文字字符串 michael 作为第一个参数传递。防止脚本中出现此类错误的一个好方法是编写:

#!/bin/bash
var1=$( linux command to list ldap users | grep "user: ${1:?}")
echo "$var1"

如果该参数非空,${1:?} 将扩展为 $1。如果它为空,您将收到错误消息。

如果您希望脚本在 grep 未找到任何值时终止,您可能需要:

var1=$( linux command to list ldap users | grep "user: ${1:?}") || exit

但实际验证参数并打印错误消息可能需要 easier/better。 (就个人而言,我发现来自 ${:?} 构造的错误消息有点不理想。)类似于:

#!/bin/bash
if test $# -lt 1; then echo 'Missing arguments' >&2; exit 1; fi