变量内的位置参数不可读 - 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
我正在处理的小脚本有问题,你能解释一下为什么它不起作用吗:
#!/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