我如何知道Bash中是否设置了变量?
例如,如何检查用户是否将第一个参数提供给函数?
function a {
# if $1 is set ?
}
Run Code Online (Sandbox Code Playgroud) 最近在一次代码审查中,一位同事声称该[[ ]]
构造比[ ]
在类似的构造中更受欢迎
if [ "`id -nu`" = "$someuser" ] ; then
echo "I love you madly, $someuser"
fi
Run Code Online (Sandbox Code Playgroud)
他无法提供理由.有吗?
我查看了bash手册页,并[[
说它使用条件表达式.然后我查看了Conditional Expressions部分,它列出了与test
(和[
)相同的运算符.
所以我想知道,Bash [
和[[
Bash 之间的区别是什么?
有人能告诉我是否应该在shell脚本中包含变量的引号?
例如,以下是正确的:
xdg-open $URL
[ $? -eq 2 ]
Run Code Online (Sandbox Code Playgroud)
要么
xdg-open "$URL"
[ "$?" -eq "2" ]
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么?
我有dockerfile
FROM centos:7
ENV foo=42
Run Code Online (Sandbox Code Playgroud)
然后我建立它
docker build -t my_docker .
Run Code Online (Sandbox Code Playgroud)
并运行它.
docker run -it -d my_docker
Run Code Online (Sandbox Code Playgroud)
是否可以从命令行传递参数并在Dockerfile中使用if else?我的意思是
FROM centos:7
if (my_arg==42)
{ENV=TRUE}
else:
{ENV=FALSE}
Run Code Online (Sandbox Code Playgroud)
并使用此参数构建.
docker build -t my_docker . --my_arg=42
Run Code Online (Sandbox Code Playgroud) 我正在编写一个bash脚本,我正在尝试检查是否提供了特定的参数.我注意到一个奇怪的(至少对我而言)[ -n arg ]
测试行为.对于以下脚本:
#!/bin/bash
if [ -n $1 ]; then
echo "The 1st argument is of NON ZERO length"
fi
if [ -z $1 ]; then
echo "The 1st argument is of ZERO length"
fi
Run Code Online (Sandbox Code Playgroud)
我得到的结果如下:
没有参数:
xylodev@ubuntu:~$ ./my-bash-script.sh
The 1st argument is of NON ZERO length
The 1st argument is of ZERO length
Run Code Online (Sandbox Code Playgroud)带参数:
xylodev@ubuntu:~$ ./my-bash-script.sh foobar
The 1st argument is of NON ZERO length
Run Code Online (Sandbox Code Playgroud)我已经发现$1
用双引号括起来给我的结果符合预期,但我仍然想知道为什么当没有使用引号并且没有参数调用脚本时,两个测试都返回true?它似乎$1
是null然后,所以[ -n $1 ] …
我需要更新用于git的bash函数:
push() {
a=$1
if [ $# -eq 0 ]
then
a=$(timestamp)
fi
# ... do stuff
}
Run Code Online (Sandbox Code Playgroud)
但我不知道这条线是如何工作的
if [ $# -eq 0 ]
Run Code Online (Sandbox Code Playgroud)
我需要检查第一个参数,然后再检查第二个参数。
因此,将有2个if语句。
我该如何更新以及该行如何工作
if [ $# -eq 0 ]
Run Code Online (Sandbox Code Playgroud) 我创建了一个脚本,以便在运行该脚本时使用参数。如何检查是否没有提供参数?如果没有参数通过,它必须显示打印帮助。
while test -n "$1"; do
case "$1" in
-help|-h)
print_help
exit $ST_UK
;;
--version|-v)
print_version $PROGNAME $VERSION
exit $ST_UK
;;
--activeusers|-a)
opt_var=$2
au
shift;;
--dailyusers|-d)
opt_var1=$2
dau
shift;;
*)
echo "Unknown argument: $1"
print_help
exit $ST_UK
;;
esac
shift
done
Run Code Online (Sandbox Code Playgroud) 我想检查OSX上bash脚本上输入参数的存在性。我做:
if [-z "$1"]
Run Code Online (Sandbox Code Playgroud)
我得到:
/usr/local/bin/deploy.sh: line 8: [-z: command not found
Run Code Online (Sandbox Code Playgroud)
有小费吗?
谢谢。
我想检测是否传递了无参数或无效参数并打印帮助消息。一个空的参数单独检查是可能的,但不是那么优雅。
我的 bash 脚本如下所示:
COMMAND="$1"
shift
case "$COMMAND" in
loop)
loop_
;;
...
*)
echo $"Usage: $0 {loop|...}"
exit 1
esac
Run Code Online (Sandbox Code Playgroud)
当没有参数传递时,什么都不执行;如果我通过“”,则会触发正确的情况。如果我$1
直接使用而不是使用临时变量,那么它会按预期工作。
我什至尝试添加一个特定的案例,"")
但无济于事。