【问题标题】:Positional parameter not readable inside the variable - bash script变量内的位置参数不可读 - bash脚本
【发布时间】:2021-11-16 22:45:06
【问题描述】:

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

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

【问题讨论】:

  • 好吧,var1 不是variable1In my case that is not working. 调试脚本。使用set -x 运行脚本并确认您的假设。 $michael ), it should use that value instead of $1什么值? michael 变量是否设置在父进程中? I tried the this solution, but that did not help: 但结果是什么?你有没有收到来自grep 的消息说没有这样的文件?很可能,$michael 变量为空。
  • 感谢您的快速回复,这是一个错字,它是 var1
  • 调用shell中$michael的值是多少?也许你的意思是./myscript.sh michael
  • 你们拯救了我的一天!我使用 ./myscript.sh $michael 而不是使用 ./myscript.sh michael 这就是没有输出的原因。我之前多次使用过这个命令,但今天我卡住了,我认为问题出在脚本上,而不是实际输入,因此 $michael 不存在,但 michael 存在并且它现在正在工作!我可以在没有这个想法的情况下进一步学习,非常感谢!

标签: linux bash variables scripting positional-parameter


【解决方案1】:

如果您以./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

【讨论】:

  • 你是对的!非常感谢你拯救了我的一天!
猜你喜欢
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 2017-04-15
相关资源
最近更新 更多