0

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

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

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

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

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

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

1 回答 1

0

如果您调用脚本 as./mycript.sh $michael并且未在 shell 中设置变量michael,那么您正在调用不带参数的脚本。也许您打算 ./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

但是实际验证参数并打印错误消息可能更容易/更好。(就个人而言,我发现来自构造的错误消息${:?}不太理想。)类似于:

#!/bin/bash
if test $# -lt 1; then echo 'Missing arguments' >&2; exit 1; fi
于 2021-09-23T14:23:03.883 回答